Mybatis增删改查

这里会沿用前面的一个文章的项目解构进行增删改查

学习之前,先认识一下两个符号

#{}这个是一个占位符,这里的占位符会会在参数上加上引号再替换

//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

 

posted @ 2019-04-21 13:45  长命百岁  阅读(135)  评论(0编辑  收藏  举报