zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [20211108]索引分裂块清除日志增加(唯一索引)2.txt
    [20220104]in list 几种写法性能测试.txt
    [20211215]提示precompute_subquery补充.txt
    [20211217]滑稽可笑的程序代码2.txt
    SourceTree通过配置SSH来链接GitLab
    Docker在虚拟机中的安装
    .Net 6 Log4Net【.Net Core】
    es(elasticsearch)磁盘清理记录
    JSON 之 Jackson
    git FAQ
  • 原文地址:https://www.cnblogs.com/xujie09/p/8124866.html
Copyright © 2011-2022 走看看