使用MyBatis进行CRUD操作

1.准备工作

  • 创建工程

    • 导入jar包(maven坐标)

    • 创建一个实体(实体类和数据库的表对应)

    • 创建接口,编写一个方法(接口UserDao.java)

    • 编写配置文件(resources资源下,sqlMapConfig.xml)

    • 编写映射文件(resources资源下,创建的包结果和接口的结构对应,UserDao.xml)

    • 测试类(使用mybatis的api),操作查询所有

2. 使用Junit重写UserDao.java

/** * 测试mybatis的crud操作 */
public class MybatisTest {

    private InputStream in;
    private SqlSession sqlSession;
    private UserDao userDao;

    @Before//用于在测试方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        userDao = sqlSession.getMapper(UserDao.class);
    }

    @After//用于在测试方法执行之后执行
    public void destroy()throws Exception{
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
        in.close();
    }

    /** * 测试查询所有 */
    @Test
    public void testFindAll(){
        //5.执行查询所有方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
      
      /* 保存,删除,修改等操作 */
      

    }

3.进行CURD时的注意事项

3.1 事务处理

在进行增删改时需要进行事务处理,而mybatis内部会自动开启和回滚事务,
所以需要我们使用sqlSession.commit()来提交事务.

3.2 获取自增长的数据库id

新增用户后,同时还要返回当前新增用户的id值,因为id是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长auto_increment的值返回。

配置:UserDao.xml



<insert id="saveUser" parameterType="com.itheima.domain.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">  
    insert into user(username,address,sex,birthday)
    values(#{username},#{address},#{sex},#{birthday});
insert>


3.3模糊查询中的问题:

查询语句有两种写法:

a. select * from user where name like #{name} 
b. select * from user where username like '%${value}%'

#{}与${}的区别:
a.#{}表示一个占位符号
通过#{}可以实现prepareStatement向占位符中设置值,自动进行java类型
和jdbc类型转换,#{}可以有效防止sql注入问题.#{}可以接受简单类型值和pojo属性值.
如果parameterType传输单个简单类型的值,#{}括号中可以是value或者其他自定义名称.
b.${}表示拼接sql串
通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接受简单类型值或pojo类型属性值,如果parameterType传输单个简单类型的值,
${}括号内只能是value(因为源码中读取的key的名字是value,所以在绑定参数时只能叫value).

4.Mybatis输出结果的封装

如果数据库中的字段和对象中的属性不一致



<resultMap id="userMap" type="com.itheima.domain.User">
    
    <id property="userId" column="id">id>
    
    <result property="userName" column="username">result>
    <result property="userAddress" column="address">result>
    <result property="userSex" column="sex">result>
    <result property="userBirthday" column="birthday">result>
resultMap>

	<id/>:此属性表示查询结果集的唯一标识,也是数据库的主键,
			如果是多个字段为复合唯一约束则定义多个<id/>
	property:表示java中类的属性
	column:表示数据库的列名
	column和property放在一块儿表示将sql查询出来的字段映射到指定的pojo类属性上。 
<result />:普通属性(普通字段),即pojo的属性	

你可能感兴趣的:(SSM框架)