1. 程式人生 > >Mybatis輸入類型和結果類型

Mybatis輸入類型和結果類型

表名 val get -s resultmap type null .... 添加

參數類型:

  • 簡單類型:引用時名稱隨便寫

  基本數據類型

  基本數據類型的包裝類型

   String

  • pojo對象:引用時寫實體類的屬性名

   #{name},引用的是實體類User中的name屬性

public class QueryVo {

// 包含其他的pojo

private User user;

private Integer startIndex;

private Integer pageSize;

}

<!--#{user.name} 引用屬性中的屬性名-->
<select id="findUserByQueryVo" parameterType="queryVO" resultType="user">
select * from user where name like "%"#{user.name}"%" limit #{startIndex},#{pageSize}
</select>

1.傳遞的多個參數

/**
* 多條件查詢
*/
public List<User> findUsers(Integer startIndex, Integer pageSize, String name);

parameterType:省略不配置

引入時: param1 ,param2,......

<select id="findUsers" resultType="user">
select * from user where name like "%"#{param3}"%" limit #{param1},#{param2}
</select>

2.傳遞map

//獲取session
SqlSession session = sessionFactory.openSession();
//通過getMapper方法獲取某接口的動態代理類對象
UserDao userDao = session.getMapper(UserDao.class);

Map<String,Object> map = new HashMap<>();
map.put("startIndex",2);
map.put("pageSize",2);
map.put("name","zhang");

List<User> userList = userDao.findUserByMap(map);

屬性名自己指定

引用時引用屬性名即可

<select id="findUserByMap" parameterType="map" resultType="User">
select * from user where name like "%"#{name}"%" limit #{startIndex},#{pageSize}
</select>

返回值

<!-- resultMap最終還是要將結果映射到pojo上,type就是指定映射到哪一個pojo -->

<!-- id:設置ResultMap的id -->

<resultMap id="users" type="user">

<!-- 定義主鍵 ,非常重要。如果是多個字段,則定義多個id -->

<!-- property:主鍵在pojo中的屬性名 -->

<!-- column:主鍵在數據庫中的列名 -->

  <id property="id" column="id" />

<resultMap id="users" type="user">
<id column="u_id" property="id"></id>
<result column="name" property="name"></result>
<result column="address" property="address"></result>
<result column="birthday" property="birthday"></result>
<result column="sex" property="sex"></result>
</resultMap>

<select id="findAll" resultMap="users">

select * from sys_user

</select>

根據id查詢

<!--根據id查詢-->

<!--parameterType:指定參數類型-->

<!--簡單類型:基本數據類型&包裝類型 String

如果參數是簡單類型,引用時名稱隨便寫-->

<!--根據id查詢-->
<select id="findById" resultType="com.wqy.domain.User" parameterType="java.lang.Integer">
select * from user where id = #{id}

</select>

select * from user where id = #{abc}
select * from user where id = #{id}

模糊查詢

<!--

參數類型:pojo對象,引用實體類中的屬性名

#{name},引用的是實體類中的name屬性

-->

<!--模糊查詢-->
<select id="findByUser" parameterType="com.wqy.domain.User" resultType="com.wqy.domain.User">
SELECT * from user WHERE name LIKE "%"#{name}"%"
</select>

<select id="findByName" resultType="com.wqy.domain.User" parameterType="java.lang.String">
SELECT * from user WHERE name LIKE "%"#{abc}"%"
</select>

#{} 和${}

關於#{}:

1、#{}等同於 PreparedStatement 中的占位符?,會自動對傳入的字符串數據加一對單引號,可以避免 Sql 註入。

比如

select * from user where username = #{username} , 傳入的 username 為小張,那麽最後打印出來的就是

select * from user where username = ‘小張’

2、#{}可以接收簡單類型值或 Pojo 屬性值。

如果 parameterType 傳輸單個簡單類型值,#{}括號中可以是任意名稱。

關於${}:

1、${}將傳入的數據直接顯示生成在 Sql 中,只是簡單的拼接。

如:order by ${id},如果傳入的值是 id,則解析成的 Sql 為 order by id。

如果上面的例子使用${},則成了 select * from user where username = 小張

2、${}可以接收簡單類型值或 Pojo 屬性值,

如果 parameterType 傳輸單個簡單類型值,${}括號中只能是“value”這個字符串

<!--模糊查詢-->
<select id="findByUser" parameterType="com.wqy.domain.User" resultType="com.wqy.domain.User">
SELECT * from user WHERE name LIKE "%"#{name}"%"
</select>

user.setName("Rose");

"%"#{name}"%" Rose
#{name} %Rose%
${name} ‘%Rose%‘
‘%${name}%‘ Rose

<select id="findByName" resultType="com.wqy.domain.User" parameterType="java.lang.String">
SELECT * from user WHERE name LIKE "%"#{abc}"%"
</select>

"%"#{abc}"%" Rose

‘%${value}%‘ Rose

如果傳遞的是簡單類型參數,必須使用${value}

如果是pojo, 必須${屬性名}

總結:

1、$方式一般用於傳入數據庫對象,例如傳入表名、order by 的字段

2、一般能用#的就別用$.

增加用戶

<insert id="addUser" parameterType="com.wqy.domain.User">
INSERT INTO user values (null,#{name},#{age})
</insert>

<!--
selectKey: 查詢鍵值
屬性:order:在添加之前查詢,還是之後查詢
keyProperty: 對應pojo對象中的屬性名
keyColumn: 對應數據庫中某列
resultType: 返回值類型
select last_insert_id(): 是mysql數據庫的一個函數,獲取該表最後一次添加的自增的值
-->

<insert id="addUser" parameterType="com.wqy.domain.User">
<selectKey order="AFTER" keyProperty="id" keyColumn="id" resultType="java.lang.Integer">
SELECT last_insert_id();
</selectKey>
INSERT INTO user values (null,#{name},#{age})
</insert>

sqlSession.insert("com.wqy.dao.UserDao.addUser", user);
System.out.println(user.getId());

在執行插入操縱後,可以打印用戶的id

Mybatis輸入類型和結果類型