2、Mybatis增删改查(CURD)
来源:互联网 发布:张无忌武力 知乎 编辑:程序博客网 时间:2024/06/01 09:20
- 使用 mybatis 查询用户数据(读取用户列表)
- 使用 mybatis 增加用户数据
- 使用 mybatis 更新用户数据
- 使用 mybatis 删除用户数据
查询
在入门程序中已经实现了查询单一用户,现在我们实现模糊查询和查找所有用户。
1、查询所有
User.xml:
<!-- 查询所有 --><select id="getAll" resultType="cn.xpu.hcp.bean.User"> select * from user</select>
测试代码:
SqlSession session = sqlSessionFactory.openSession();//selectOne(...)只能查询一条记录,使用selectList(...)查询多条记录List<User> list = session.selectList("getAll");for(User user:list){ System.out.println(user);}session.close();
2、模糊查询
有两种写法用于模糊查询:
方法一:使用#{value}
User.xml:
<!-- 模糊查询,方法一 --><select id="getLikeByName" parameterType="string" resultType="cn.xpu.hcp.bean.User"> select * from user where username like #{value}</select>
测试代码:
List<User> list = session.selectList("getLikeByName","%张%");
注意:使用#{}这种形式时,输入的参数需要加上%。
当然,如果你一定要使用#{…},在代码中又很傲娇的就是不想加%,那我们就在xml中的sql语句中加:
select * from user where username like CONCAT(CONCAT('%', #{value}),'%')
这种我也不想,我不要写CONCAT()进行拼接。
看一条sql语句:
SELECT * FROM USER WHERE username LIKE "%"'张'"%"
请问这条语句对不对,能不能运行?
我们从来没写过这种形式的模糊查询语句,其实这是正确的。
所以,最终版xml中的写法:
<select id="getLikeByName" parameterType="string" resultType="cn.xpu.hcp.bean.User"> select * from user where username like "%"#{value}"%"</select>
测试结果:
方法二:使用${value}
User.xml:
<!-- 模糊查询,方法二 --><select id="getLikeByName" parameterType="string" resultType="cn.xpu.hcp.bean.User"> select * from user where username like '%${value}%'</select>
测试代码:
List<User> list = session.selectList("getLikeByName","张");
使用${value}在输入参数时不需要%。并且可以直接写%${value}%。
#{}和${}:
#{}表示一个占位符,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是任意名称。
${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql中,且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
#{}方式能有效防止sql注入,首选。
添加
User.xml:
<!-- 添加 --><insert id="insertUser" parameterType="cn.xpu.hcp.bean.User"> insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})</insert>
测试代码:
public void insertUser(){ SqlSession session = sqlSessionFactory.openSession(); User user = new User("孙权","m",new Date(),"南昌"); session.insert("insertUser", user); //需要进行事务提交,否则无法添加成功 session.commit(); session.close();}
有时候我们添加完对象后想把这个对象打印出来,但是,由于主键是mysql自增的,我们不做其他处理直接打印显示id=0.
这时我们使用SELECT LAST_INSERT_ID()来查找id
只需要修改User.xml中添加部分的代码:
<!-- 添加 --><insert id="insertUser" parameterType="cn.xpu.hcp.bean.User"> <!-- selectKey 标签实现主键的返回 keyColumn:主键对应表中列名 keyProperty:主键对应类中的属性名 order:设置在执行insert语句之前还是之后查询id,这里选择之后 --> <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})</insert>
现在我们插入后再显示插入对象就能获得id值了:
更新
User.xml:
<!-- 更新 --><update id="updateUser" parameterType="cn.xpu.hcp.bean.User"> update user set username=#{username},birthday = #{birthday},sex = #{sex},address = #{address} WHERE id=#{id}</update>
测试代码:
public void updateUser(){ SqlSession session = sqlSessionFactory.openSession(); User user = session.selectOne("GetUserByID", 1); user.setUsername("曹操"); session.update("updateUser", user);//先取得,再修改,防止空值的出现 session.commit(); session.close();}
删除
User.xml:
<!-- 删除 --><delete id="deleteUserById" parameterType="int"> DELETE FROM USER WHERE id = #{id}</delete>
测试代码:
@Testpublic void deleteUserById(){ SqlSession session = sqlSessionFactory.openSession(); session.delete("deleteUserById", 6); session.commit(); session.close();}
- 2、Mybatis增删改查(CURD)
- MyBatis实现单表增删改查(CURD)--新增
- MyBatis实现单表增删改查(CURD)--删除
- MyBatis实现单表增删改查(CURD)--修改
- CURD增删改查
- Hibernate---curd(增删查改)操作
- YII2 CURD 增删改查
- Yii 增删改查(CURD)
- CURD-增删查改操作
- MyBatis实现单表增删改查(CURD)--查询所有返回list
- MyBatis实现单表增删改查(CURD)--查询所有返回Map
- MyBatis实现单表增删改查(CURD)--根据id查询
- MyBatis实现单表增删改查(CURD)--模糊查询
- MyBatis实现单表增删改查(CURD)--属性名与字段名不一致问题
- (2)MyBatis之增删改查
- mybatis(2)增删改查
- laravel (5.2) curd (增删改查)
- hibernate基本概念和CURD(增删改查)详解
- Spring表达式基础(Spring Expression Language)
- tensor.get_shape()
- linux命令
- 自定义SpringMVC全局参数转换
- 【internal】redo生成机制
- 2、Mybatis增删改查(CURD)
- c#怎样往excel中写入数据
- 润乾报表 dql分析模块报表实现隔行异色效果
- HDU1232畅通工程(并查集)
- Python安装教程
- CSDN-markdown语法
- 项目日记2—服务器端环境搭建(一)
- 用原生js写淡入淡出动画
- 枚举——三种解