这里会沿用前面的一个文章的项目解构进行增删改查
学习之前,先认识一下两个符号
#{}这个是一个占位符,这里的占位符会会在参数上加上引号再替换
//Java里面是这样写的 String name = "peter"; List<User> users = session.selectList("user.getUserByName", name); //mapper.xml里面是这样的写的,这里注意一点,#{}里面的名字,可以写任何名称都可以 <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User"> select * from users where name like #{test} </select> //最终执行的sql语句会变成 select * from users where name like 'peter'
${}这个是字符串拼接符号,不会在参数中添加任何引号,这个符号的弱点是,容易产生sql注入,所以不建议使用除非在你本身的语句当中已经带有引号去防止sql注入
//java代码是这样的 String name = "a"; List<User> users = session.selectList("user.getUserByName", name); //mapper.xml是这样的,这里需要注意${}里面的名称必须是value,如果是其它名称,会抛异常There is no getter for property named 'xxx' in 'class java.lang.String' <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User"> select * from users where name like '%${value}%' </select> //最终执行代码的语句 select * from users where name like '%a%'
事务自动提交的问题:
一般情况在openSession()的时候,默认是false,如果不加上true,做insert或者update,delete的时候,数据库就不会有真正的操作
1.新增
//Java代码部分 User user = new User(); user.setId(8); user.setName("Jack"); user.setAge(13); int result = session.insert("user.insertUser", user); //mapping.xml部分 <insert id="insertUser" parameterType="com.test.model.User"> insert into users(id,name,age) values(#{id},#{name},#{age}) </insert>
2.删除
//Java代码部分 User user = new User(); user.setId(2); int result = session.delete("user.deleteUser",user); //mapper.xml部分 <delete id="deleteUser" parameterType="com.test.model.User"> delete from users where id=#{id} </delete>
3.修改
//Java部分 User user = new User(); user.setId(3); user.setName("Kitty"); user.setAge(78); int result = session.update("user.updateUser", user); //mapper.xml部分 <update id="updateUser" parameterType="com.test.model.User"> update users set name=#{name}, age=#{age} where id = #{id} </update>
4.查询
查询语句
//Java里面是这样写的 String name = "p"; List<User> users = session.selectList("user.getUserByName", name); //mapper是这样写的 <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User"> select * from users where NAME like '%${value}%' </select>
selectList 与 selectOne的区别
selectList - 是查询返回的一个列表
selectOne - 查询一个结果,查询的结果当中是有不止一个值,程序就会抛异常如Expected one result (or null) to be returned by selectOne(), but found: 3