添加
添加需
- 添加用户,返回添加的用户信息,包括(id,address,sex,username,birthday)
在User.xml添加insert的sql语句
这次我们使用的是添加用户,所以要使用insert标签。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"><!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 --> <!-- id:statement的id 或者叫做sql的id--> <!-- parameterType:声明输入参数的类型 --> <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 --> <!-- #{}:输入参数的占位符,相当于jdbc的? --> <!-- 根据id获取用户信息 --> <select id="findUserById" parameterType="int" resultType="com.dtt.mybatis.pojo.User" > select * from user where id = #{id} </select> <!-- 根据用户名,查询用户列表,支持模糊查询 --> <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.dtt.mybatis.pojo.User"> select * from user where username like '%${value}%' </select> <insert id="insertUser" parameterType="com.dtt.mybatis.pojo.User"> <!-- 将插入数据的主键返回,返回到user对象中。 select LAST_INSERT_ID():得到刚insert进行的记录的主键,只适用于自增主键 keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性。 order:select LAST_INSERT_ID()执行顺序,相对insert语句来说他的执行顺序 resultType:指定select LAST_INSERT_ID()的返回数据的类型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> INSERT into user(username,birthday,sex,adderss) VALUES (#{username},#{birthday},#{sex},#{adderss}) </insert> </mapper>
这里有几点是需要我们要留意的:
1.因为要插入的是用户实体,所以我们的输入格式parameterType=”com.dtt.mybatis.pojo.User”;
2.需求中说返回添加的用户信息,包括(id,address,sex,username,birthday),再怎么数据库中的id字段是自增长的,我们可以通过select LAST_INSERT_ID()语句来得到刚insert进行的记录的主键的值。
3.在selectKey标签中,keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性。 order:select LAST_INSERT_ID()执行顺序,相对insert语句来说他的执行顺序 。
4.插入语句我们使用的是#{}占位符,可以在括号内直接写User的属性值。且不能有‘’,以下两种是错误的写法:
INSERT into user (username ,birthday,sex,address)VALUES (#{User.username},#{User.birthday},#{User.sex},#{User.address}) INSERT into user (username ,birthday,sex,address)VALUES ('#{username}','#{birthday}','#{sex}','#{address}') INSERT into user (username ,birthday,sex,address)VALUES ('#{User.username}','#{User.birthday}','#{User.sex}','#{User.address}')
当然我们也可以使用${}来拼接字符串,但是可能会遇到数据格式的问题,最常见的就是时间格式问题。
INSERT into user (username ,birthday,sex,address)VALUES ('${username}','${birthday}','${sex}','${address}')
测试程序
在UserTest.java测试类中添加测试方法testinsertUser:
@Test public void testInsertUser(){ //数据库会话 SqlSession sqlSession=null; try { sqlSession= sqlSessionFactory.openSession(); //添加数据信息 User user = new User(); user.setSex("1"); user.getAddress("东京"); user.getBirthday(new Date()); user.setUsername("fenyan"); sqlSession.insert("test.insertUser", user); sqlSession.commit(); System.out.println("添加成功)"); System.out.println(user.getId()); }catch( Exception e){ e.printStackTrace(); } finally{ if(sqlSession!=null){ sqlSession.close(); } } }
删除的需求
- 根据id删除用户信息
在User.xml添加delete的sql语句
<delete id="delUserById" parameterType="int"> delete from user where id=#{id} </delete>
// 根据id删除用户 @Test public void testDelete() { // 数据库会话实例 SqlSession sqlSession = null; try { // 创建数据库会话实例 sqlSession = sqlSessionFactory.openSession(); // 删除用户 sqlSession.delete("test.delUserById",55); // 提交事务 sqlSession.commit(); System.out.println("删除成功"); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
修改的需求
- 根据id修改用户信息
在User.xml添加update的sql语句
<update id="updateUserById" parameterType="com.dtt.mybatis.pojo.User"> update user set username=#{username} where id=#{id} </update>
@Test public void testUpateUser(){ // 数据库会话实例 SqlSession sqlSession = null; try { // 创建数据库会话实例 sqlSession = sqlSessionFactory.openSession(); // 添加用户 User user =new User (); user.setId(20); user.setSex("1"); user.setAddress("浙江"); user.setBirthday(new Date()); user.setUsername("凤凰女"); sqlSession.update("test.updateUserById",user); sqlSession.commit(); System.out.println(user.getId()); System.out.println(user.getUsername()); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
增删改查就完成了,这个些功能仅仅是使用了一个映射文件完成的,可以感觉到系统变的非常的灵活,而且使用的也很方面,把封装发挥到了很好的地步。