首先简要说明一下占位符与两个Session的方法:
<!--
#{}和${}:
#{} : 表示一个占位符号
#{}接收输入参数,类型可以是简单类型,pojo,hashmap
如果接收简单类型,#{}中可以写成value或其他名称
如果接收pojo对象值,通过ONGL
读取对象中的属性值,通过属性.属性.属性名获取对象值
${} : 表示一个拼接符号
${}接收输入参数,类型可以是简单类型,pojo,hashmap
如果接收简单类型,${}中只能写成value
如果接收pojo对象值,通过ONGL
读取对象中的属性值,通过属性.属性.属性名获取对象值
-->
/* SqlSession 中的两个方法 :
* selectOne() 与 selectList()
*
* selectOne() : 表示查询出一条记录进行映射,
* 如果使用selectOne()可以实现,
* 使用selectList()也可以实现(list中只有一个对象)
* selectList(): 表示查询出一个集合进行映射
*/
添加一条记录 :
<!--
添加用户 :
parameterType:指定输入参数,类型是pojo(包括用户信息)
#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值
-->
<insert id="insertUser" parameterType="Bean.User">
<!-- 自增生成主键 -->
<!--
自增生成主键,将插入的主键返回,返回到user对象中,
insert语句里不用插入id和#{id}
SELECT LAST_INSERT_ID() : 得到刚insert进去记录的主键值,只适用于自增
keyProperty : 将查询到主键值设置到User对象的id属性里
order : SELECT LAST_INSERT_ID()执行顺序,相对于insert的执行顺序
resultType : 返回值类型为Integer
-->
<!--
<selectKey keyProperty="id" ,order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
-->
<!-- uuid生成主键 -->
<!--
使用mysql的uuid生成主键,insert语句中要添加id
执行过程:
首先通过uuid()得到主键,将主键设置到user对象的id属性中
其次在执行insert时,从user对象中取出id属性值
-->
<!--
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
insert into user(id,username,birthday,sex,address)
value(#{id},#{username},#{birthday},#{sex},#{address})
-->
<!-- oracle的序列生成主键 -->
<!--
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT 序列名.nextval()
</selectKey>
insert into user(id,username,birthday,sex,address)
value(#{id},#{username},#{birthday},#{sex},#{address})
-->
insert into user(id,username,birthday,sex,address)
<!-- #{}中的参数名必须为User对象的属性名 -->
value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>
//新建一个用户
User user = new User(8,"用户名","男",new Date(),"地址");
/*
* 添加一条记录
* 添加成功 : 返回1
* 添加失败 : 什么都不返回
*/
int insert = session.insert("text.insertUser", user);
//提交事物
session.commit();
//释放资源
session.close();
根据id删除一条记录 :
<!--
删除一个用户
根据id删除用户,需要输入id值
-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
/*
* 删除用户 : 删除成功返回1
* 删除失败返回0
*/
int delete = session.delete("text.deleteUser", 7 );
//提交事物
session.commit();
//释放资源
session.close();
根据id更改一条记录 :
<!--
根据id更新用户
parameterType : 指定id和更新信息,注意:id必须存在
-->
<update id="updateUser" parameterType="Bean.User">
update user
set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id = #{id}
</update>
//要更新的用户信息
//必须要设置id,否则更新全部
User user = new User(3,"用户名","男",new Date(),"地址");
/*
* 更新用户信息
* 更新成功 : 返回值为1
*/
int update = session.update("text.updateUser",user);
//提交事物
session.commit();
//释放资源
session.close();
查询单条记录 :
<select id="findUserById" parameterType="int" resultType="Bean.User">
SELECT * FROM USER WHERE ID=#{id}
</select>
User user = session.selectOne("text.findUserById", 1);
//释放SqlSession资源
session.close();
查询多条记录 :
<!--
根据用户名模糊查询,可能返回多条记录
resultType:指定的就是单条记录所映射的java类型
${username}:表示拼接sql串,将接收到参数内容不加任何修饰拼接在sql中
${value}:代表拼接参数,{}里面在XML中只能写value
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="Bean.User">
SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'
</select>
//list中的User和映射文件中resultType指定的User类型一致
List<User> list = session.selectList("text.findUserByName", "A");
//释放资源
session.close();