01-Mybatis的CRUD

    科技2022-07-13  123

    一、Mybatis的查询所有和保存用户信息

    1.1 映射配置文件IUserMapper.xml代码如下:

    <?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="cn.lhh.dao.IUserDao"> <!--查询所有用户信息--> <select id="findAll" resultType="cn.lhh.domain.User"> select * from user; </select> <!--保存用户信息--> <insert id="saveUser" parameterType="cn.lhh.domain.User"> insert into user(username,birthday,gender) values(#{username},#{birthday},#{gender}) </insert> </mapper>

    1.2 测试代码如下

    package cn.lhh.test; import cn.lhh.dao.IUserDao; import cn.lhh.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import java.util.Date; import java.util.List; public class MybatisTest { private InputStream is; private SqlSessionFactory factory; private SqlSession sqlSession; private IUserDao dao; @Before //在方法执行之前执行此操作 public void init() throws Exception{ //1.读取映射配置文件 is = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory对象 factory = new SqlSessionFactoryBuilder().build(is); //3.创建SqlSession对象 sqlSession = factory.openSession(); //4.创建代理对象 dao = sqlSession.getMapper(IUserDao.class); } @After //在方法执行之后 public void destroy() throws Exception{ //提交事务 sqlSession.commit(); //记得事务要提交,否则会发生回滚,导致数据没保存 //关闭资源 sqlSession.close(); is.close(); } /** * 测试查询所有用户信息 */ @Test public void testFindAll(){ //执行方法 List<User> users = dao.findAll(); for (User user : users) { System.out.println(user); } } /** * 测试保存用户 */ @Test public void testSave() { User user = new User(); user.setUsername("李四"); user.setBirthday(new Date()); user.setGender("男"); dao.saveUser(user); //sqlSession.commit(); //记得事务要提交,否则会发生回滚,导致数据没保存 } }

    注意: 当要获取保存数据的id时,可以进行如下操作:

    把保存数据的代码代码改为: <!--保存用户信息--> <insert id="saveUser" parameterType="cn.lhh.domain.User"> <!-- keyProperty:user中数据,keyColumn:数据库中数据--> <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> select last_insert_id(); </selectKey> insert into user(username,birthday,gender) values(#{username},#{birthday},#{gender}) </insert> 测试代码: /** * 测试保存用户 */ @Test public void testSave() { User user = new User(); user.setUsername("李四"); user.setBirthday(new Date()); user.setGender("男"); System.out.println("保存操作之前:" + user); dao.saveUser(user); System.out.println("保存操作之后:" + user); /* 保存操作之前:User{id=0, username='李四', birthday=Sun Oct 04 11:30:34 CST 2020, gender='男'} 保存操作之后:User{id=7, username='李四', birthday=Sun Oct 04 11:30:34 CST 2020, gender='男'} */ }

    二、Mybatis的更新和删除用户信息

    2.1 映射配置文件IUserMapper.xml代码如下

    <!--跟新用户信息--> <update id="updateUser" parameterType="cn.lhh.domain.User"> update user set username=#{username},birthday=#{birthday},gender=#{gender} where id=#{id} </update> <!--根据用户id删除用户信息--> <delete id="deleteUser" parameterType="integer"> delete from user where id=#{uid} /*当参数为基本数据类型且只有一个时,可以谁便用参数代替*/ </delete>

    2.2 测试代码如下

    /** * 测试跟新用户信息 */ @Test public void testUpdate() { User user = new User(); user.setId(5); user.setUsername("王五"); user.setBirthday(new Date()); user.setGender("女"); dao.updateUser(user); } /** * 测试删除用户信息 */ @Test public void testDelete() { User user = new User(); dao.deleteUser(5); }

    三、Mybatis的模糊查询

    第一种方法(推荐)

    3.1 映射配置文件IUserMapper.xml代码如下

    <!--根据名字模糊查询用户--> <select id="findByName" parameterType="string" resultType="cn.lhh.domain.User"> select * from user where username like #{uName} </select>

    3.2 测试代码如下

    /** * 测试根据名字模糊查询用户信息 */ @Test public void testFindByName() { List<User> users = dao.findByName("%王%"); for (User user : users) { System.out.println(user); } /*结果为: User{id=3, username='王五', birthday=Thu Jul 29 08:00:00 CST 1999, gender='女'} User{id=4, username='王大胆', birthday=Sun Mar 20 08:00:00 CST 1994, gender='男'} User{id=5, username='啊王', birthday=Sun Aug 20 08:00:00 CST 1995, gender='女'} User{id=6, username='大王在', birthday=Tue Apr 30 08:00:00 CST 1996, gender='男'}*/ }

    第二种方法(不推荐)

    3.3 映射配置文件IUserMapper.xml代码如下

    <!--根据名字模糊查询用户--> <select id="findByName" parameterType="string" resultType="cn.lhh.domain.User"> <!-- value是个固定值,不可以改变 --> select * from user where username like '%${value}%' </select>

    3.2 测试代码如下

    /** * 测试根据名字模糊查询用户信息 */ @Test public void testFindByName() { List<User> users = dao.findByName("王"); for (User user : users) { System.out.println(user); } }
    Processed: 0.011, SQL: 8