MyBatis学习总结(一)简单入门案例

MyBatis学习总结(一)简单入门案例

主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用

一、需要的jar包:

1、核心包

2、依赖包

3、jdbc数据库驱动(mysql为例)

二、配置文件

1、核心配置文件(SqlMapConfig.xml)

组成部分

1、数据连接和事务
<!--和spring整合后该配置取消-->
<environments default="development">
    <environment id="development">
        <!--使用jdbc事务管理-->
        <transactionManager type="JDBC" />
        <!--数据库连接-->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </dataSource>
    </environment>
</environments>
2、配置映射文件
<mappers>
    <mapper resource="com/mybatisTest/map/User.xml" />
</mappers> 

2、映射文件(User.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="test">
	
    <!-- 根据id获取用户信息 -->
    <select id="findUserById" parameterType="int" resultType="com.mybatisTest.pojo.User">
        select * from user where id = #{id}
    </select>

	<!-- 根据username查询 -->
	<select id="findUserByUsername" parameterType="java.lang.String" resultType="com.mybatisTest.pojo.User">
    	select * from user where username like '%${value}%'  /*如果参数类型是简单数值类型,大括号中间必须value*/
	</select>
	
	<!-- 添加用戶 -->
    <insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
        insert into user(username,birthday,sex,address,detail,score)
        values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});
    </insert>

	<!-- 刪除用戶 -->
    <delete id="deleteUser" parameterType="com.mybatisTest.pojo.User">
        delete from user where id=#{id}
    </delete>
	
	<!-- 更新用戶 -->
    <update id="updateUser" parameterType="com.mybatisTest.pojo.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address},detail=#{detail},score=#{score}
        where id=#{id}
    </update>

</mapper>

说明:
在这个配置文件的mappers 属性中有个namespace,他的作用是为了区分不同的sql组,相当于java中包的概念,对user的操作使用同一个namespace,对商品的操作使用同一个namespace,通常也可以将mapper文件的路径名作为namespace,也可以根据需求自定义,在后边测试类中,使用namespace.[sqlid]来执行对应的sql

三、测试类

public class Demo01 {

    //定义会话工厂
    private SqlSessionFactory sqlSessionFactory;

    //创建会话
    @Before
    public void createSqlSessionFactory() throws Exception {
        //配置文件位置
        String resource = "SqlMapConfig.xml";
        //获取输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    //根据用户id查询
    @Test
    public void testFindUserById(){
        //数据库会话实例
        SqlSession sqlSession = null;
        sqlSession = sqlSessionFactory.openSession();

        User user = sqlSession.selectOne("test.findUserById",1);

        System.out.println(""+user+"");
        sqlSession.close();
    }


    //根据用户名查询
    @Test
    public void testFindUserByUsername(){
        //数据库会话实例
        SqlSession sqlSession = null;
        sqlSession = sqlSessionFactory.openSession();

        List<User> list = sqlSession.selectList("test.findUserByUsername", "xu");
        for (User user:list) {
            System.out.println(user);
        }
        
        sqlSession.close();
    }

    //添加用户
    @Test
    public void insertUser(){
        //数据库会话实例
        SqlSession sqlSession = null;
        sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setUsername("徐杰");
        user.setAddress("山东德州");
        user.setDetail("1212");
        user.setScore(100f);
        user.setBirthday(new Date());

        sqlSession.insert("test.insertUser",user);
        
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

	//删除用户
    @Test
    public void deleteUser(){
        //数据库会话实例
        SqlSession sqlSession = null;
        sqlSession = sqlSessionFactory.openSession();

        sqlSession.delete("com.mybatisTest.map.User.xml.deleteUser",3);

        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

	//更新用户
    @Test
    public void updateUser(){
        //数据库会话实例
        SqlSession sqlSession = null;
        sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setId(2);
        user.setUsername("xiaoming");
        user.setBirthday(new Date());
        user.setSex("女");
        user.setAddress("北京北京");
        user.setDetail("122121212");
        user.setScore(90f);
        sqlSession.update("user.updateUser",user);

        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }	
}

四、映射文件中insert操作获取新增主键

1、使用数据库自带的自增方式:

说明:这个地方的获取主键,是将新增加记录的id自动赋值给新增加记录所对应的那个实体对象的id
,我们每次新增对象的时候,都是先new一个对象,然后将各种属性赋值,由于mysql主键设置是自增,所以无需设置id,但是新增完毕之后,如何让程序得到mysql自增的id就是这里要理解的地方,需要修改的是mybatis的mapper文件,具体修改配置如下:

user.xml:

<!-- 添加用戶 -->
<insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      select LAST_INSERT_ID()
    </selectKey>
    insert into user(username,birthday,sex,address,detail,score)
    values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});
</insert>

打印新增加user的id

//添加用户
@Test
public void insertUser(){
    //数据库会话实例
    SqlSession sqlSession = null;
    sqlSession = sqlSessionFactory.openSession();

    User user = new User();
    user.setUsername("沙悟净");
    user.setAddress("流沙河");
    user.setDetail("1212");
    user.setScore(100f);
    user.setBirthday(new Date());

    sqlSession.insert("user.insertUser", user);
    System.out.println("新增主键是:"+user.getId());

    //提交事务
    sqlSession.commit();
    sqlSession.close();
}

2、使用uuid的方式:

说明:这种方式是在数据执行插入操作之前,先为插入对象设置一个uuid赋值给id,然后执行没具体配置如下:
user.xml:

<!-- 添加用戶 -->
<insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
      select uuid()
    </selectKey>
    insert into user(id,username,birthday,sex,address,detail,score)
    values(#{id},#{username},#{birthday},#{sex},#{address},#{detail},#{score});
</insert>

注意点:相对比使用数据库自增获取id的方法,使用uuid不仅需要更改标签< selectkey > 中的执行语句,返回类型,执行顺序,还有具体的sql也需要更改,使用自增获取的方式中sql不用写id,而uuid必须要加上id

原文地址:https://www.cnblogs.com/xujie09/p/8124866.html