• mybatis(二)执行CRUD操作的两种方式配置和注解


    一、使用MyBatis对表执行CRUD操作——基于XML的实现

    1、定义sql映射xml文件

      userMapper.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="com.mi.mapping.UserInfoMapper">
        
         <select id="getUser" resultType="com.mi.entity.User">
            SELECT id,user_name userName,age FROM user_t where id=1
        </select>
        
         <!-- 创建用户(Create) -->
        <insert id="addUser" parameterType="com.mi.entity.User">
            insert into user_t(id,user_name,password,age) values(11,#{userName},0,#{age})
        </insert>
        
        <!-- 删除用户(Remove) -->
        <delete id="deleteUser" parameterType="int">
            delete from user_t where id=#{id}
        </delete>
        
        <!-- 修改用户(Update) -->
        <update id="updateUser" parameterType="com.mi.entity.User">
            update user_t set user_name=#{userName},age=#{age} where id=#{id}
        </update>
        
        <!-- 查询全部用户-->
        <select id="getAllUsers" resultType="com.mi.entity.User">
            select * from user_t
        </select>
    </mapper>
    package com.mi.demo;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import com.mi.entity.User;
    
    public class TestCRUDByXmlMapper {
    
        @Test
        public void testAdd(){
            SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
            String statement = "com.mi.mapping.UserInfoMapper.addUser";
            User user = new User();
            user.setUserName("xinzhao");
            user.setAge(20);
            
            int insertResult = sqlSession.insert(statement,user);
            sqlSession.close();
            System.out.println(insertResult);
        }
        
        @Test
        public void testUpdate(){
            SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
            String statement = "com.mi.mapping.UserInfoMapper.updateUser";
            
            User user = new User();
            user.setId(11);
            user.setUserName("xinzhao");
            user.setAge(22);
            int result = sqlSession.update(statement, user);
            sqlSession.close();
            System.out.println(result);
        }
        
        @Test
        public void testDelete(){
            SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
            String statement = "com.mi.mapping.UserInfoMapper.deleteUser";
            User user = new User();
            user.setId(11);
            int result = sqlSession.delete(statement, user);
            sqlSession.close();
            System.out.println(result);
        }
        
        @Test
        public void testGetAll(){
            SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
            String statement = "com.mi.mapping.UserInfoMapper.getAllUsers";
            List<User> userList = sqlSession.selectList(statement);
            sqlSession.close();
            for(User user : userList){
                System.out.println(user.getUserName());
            }
        }
        
    }

    二、使用MyBatis对表执行CRUD操作——基于注解的实现

      1、定义sql映射的接口

      UserMapper接口的代码如下:

    package com.mi.demo;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Delete;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.annotations.Update;
    
    import com.mi.entity.User;
    
    public interface UserMapper {
    
        @Insert(" insert into user_t(id,user_name,password,age) values(11,#{userName},0,#{age})")
        public int addUser(User user);
        
        @Delete("delete from user_t where id=#{id}")
        public int deleteById(int id);
        
        @Update("update user_t set user_name=#{userName},age=#{age} where id=#{id}")
        public int update(User user);
        
        @Select("SELECT id,user_name userName,age FROM user_t where id=1")
        public User getById(int id);
        
        @Select("select * from user_t")
        public List<User> getAll();
    }

    2、在conf.xml文件中注册这个映射接口

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost/mi" />
                    <property name="username" value="root" />
                    <property name="password" value="dbdaocom" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/mi/mapping/UserInfoMapper.xml"/><!-- 注册userMapper.xml文件, -->
            <mapper class="com.mi.demo.UserMapper"/><!-- 注册UserMapper映射接口-->
        </mappers>
    </configuration>

    单元测试类的代码如下:

    package com.mi.demo;
    
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import com.mi.entity.User;
    
    public class TestCRUDByAnnotationMapper {
    
        @Test
        public void testAdd() {
            SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
            // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();
            user.setUserName("用户xdp");
            user.setAge(20);
            int result = mapper.addUser(user);
            sqlSession.close();
            System.out.println(result);
        }
        /**
         * ...the end
         */
    }

    用到的MyBatisUtil工具类代码如下:

    package com.mi.demo;
    
    import java.io.InputStream;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class MyBatisUtil {
        /**
         * 获取SqlSessionFactory
         * 
         * @return SqlSessionFactory
         */
        public static SqlSessionFactory getSqlSessionFactory() {
            // mybatis的配置文件
            String resource = "conf.xml";
            // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
            InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);
            // 构建sqlSession的工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
            return sessionFactory;
        }
    
        /**
         * 获取SqlSession
         * 
         * @return SqlSession
         */
        public static SqlSession getSqlSession() {
            return getSqlSessionFactory().openSession();
        }
    
        /**
         * 获取SqlSession
         * 
         * @param isAutoCommit
         *            true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
         *            false表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.
         *            commit()提交事务
         * @return SqlSession
         */
        public static SqlSession getSqlSession(boolean isAutoCommit) {
            return getSqlSessionFactory().openSession(isAutoCommit);
        }
    }
  • 相关阅读:
    完爆!用边缘容器,竟能秒级实现团队七八人一周的工作量
    手把手教你使用 cert-manager 签发免费证书
    手把手教你使用 Nginx Ingress 实现金丝雀发布
    Codeforces 534B Covered Path 贪心
    Codeforces 534A Exam 水
    Topcoder open 2015 Round 1A 250 Similars 枚举 + 状压
    Topcoder SRM 654 DIV1 500 FoldingPaper2 递归 + 枚举
    Topcoder SRM655 DIV2 250 BichromeBoard 水
    2015 Google code jam Qualification Round B 枚举 + 贪心
    2015 Google code jam Qualification Round A 水
  • 原文地址:https://www.cnblogs.com/tingbogiu/p/5867836.html
Copyright © 2020-2023  润新知