zoukankan      html  css  js  c++  java
  • Mybatis入门2-动态代理实现CRUD

    MyBatis动态代理生成DAO的步骤:

    1) 编写数据管理的接口XxxMapper

    2) 编写该接口对应的Mapper.xml

    a) namespace必须与Mapper接口全名一致

    b) statement的id必须和Mapper接口中的对应方法名一致

    c) statement的resultType必须和Mapper接口中对应方法返回值一致

    3) 通过SqlSession的getMapper(XxxMapper.class)方法来获取动态代理的Mapper实现类对象

    开发中运用动态代理的比较多,下面简单的介绍一个简单的案例关于增删改查的测试:

    1.编写相应的接口

      public interface UserMapper {
          
          /**根据id查询用户
           * @param id
           * @return
           */
          public User queryUserById(Long id);
          
          /**查询全部的用户
          * @return
          */
         public List<User> queryAll();
         
         /**增加用户
          * @param user
          */
         public void insertUser(User user);
         
         
         /**更新用户
          * @param user
          */
         public void updateUser(User user);
         
         
         /**
          * 删除用户
          * @param id
          */
         public void deleteById(Long id);
     }

    2.编写主配置文件

     <?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>
          <!-- 加载外部配置文件 -->
          <properties resource="jdbc.properties"></properties>
          <settings>
          <!--开启驼峰命名法-->
             <setting name="mapUnderscoreToCamelCase" value="true"/>
         </settings>
         
         <!-- 起别名 -->
         <typeAliases>
           <typeAlias alias="User" type="cn.mybatis.pojo.User"/>
         </typeAliases>
     
       <environments default="development">
         <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
             <property name="driver" value="${jdbc.driver}"/>
             <property name="url" value="${jdbc.url}"/>
             <property name="username" value="${jdbc.username}"/>
             <property name="password" value="${jdbc.password}"/>
           </dataSource>
         </environment>
       </environments>
       
       <!-- 指定mapper的配置文件 -->
       <mappers>
         <mapper resource="mapper.xml"/>
         <mapper resource="usermapper.xml"/>
       </mappers>
     </configuration>

    3.编写映射配置文件

    <?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.mapper.UserMapper">
      
        <select id="queryUserById" parameterType="java.lang.Long"  resultType="User">
          select * from tb_user where id = #{id}
        </select>
       
       <select id="queryAll"  resultType="User">
         select * from tb_user
       </select>
       
       <insert id="insertUser" parameterType="User">
         INSERT INTO tb_user (
                     id,
                     user_name,
                     password,
                     name,
                     age,
                     sex,
                     birthday,
                     created,
                     updated
                 )VALUES(
                     null,
                     #{userName},
                     #{password},
                     #{name},
                     #{age},
                     #{sex},
                     #{birthday},
                     NOW(),
                     NOW()
                 );
       </insert>   
       <delete id="deleteById" parameterType="Long">
               DELETE FROM tb_user WHERE id = #{id}
       </delete>      
     </mapper>

    4.编写测试类

     package cn.mybatis.junit.test;
      
     import static org.junit.Assert.*;
      
     import java.io.InputStream;
     import java.util.List;
      
     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.Before;
     import org.junit.Test;
     
     public class UserMapperTest {
     
         private UserMapper userMapper;
         
         InputStream inputStream;
         SqlSessionFactory sqlSessionFactory;
         SqlSession sqlSession;
         
         @Before
         public void setUp() throws Exception {
             
             String resource = "mybatis-config.xml";
             
             
             inputStream = Resources.getResourceAsStream(resource);
             
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
             
             sqlSession = sqlSessionFactory.openSession();
             
     //        通过动态代理获取
             userMapper = sqlSession.getMapper(UserMapper.class);
             
         }
     
         /**
          * 根据id查询
          */
         @Test
         public void test() {
             User user = userMapper.queryUserById(1L);
             System.out.println(user);
         }
         /**
          * 查询全部
          */
         @Test
         public void test1() {
             List<User> all = userMapper.queryAll();
             
             for (User user2 : all) {
                 System.out.println(user2);
             }
         }
         
         /**
          * 插入用户
          */
         @Test
         public void test2() {
             User user = new User();
             user.setAge(22);
             user.setBirthday(null);
             user.setName("jack");
             user.setPassword("123");
             user.setSex(1);
             user.setuserName("pick jack");
             
             userMapper.insertUser(user);
             
             this.sqlSession.commit();
         }
         
         /**
          * 删除
          */
         @Test
         public void test3() {
             this.userMapper.deleteById(12L);
             
             this.sqlSession.commit();
         }
     }
  • 相关阅读:
    圆染色问题[函数方程]
    javascript调用Flash里对象的方法(函数)搞了五个小时。
    java.net.SocketException: Connection reset 硬件防火墙也有罪?
    Persits.Jpeg CMYK-to-RGB
    Flash10下复制到剪切板的一种新方法
    Flash10 使用剪贴板得改变程序的写法了
    Flash:使用FileReference上传在Firefox上遇到的问题终于解决了
    解决FLASH遮住层的问题 IE,Firefox都适用!
    JAVA:当数据库重启后连接池没有自动识别的解决办法
    Flash与JavaScript互动
  • 原文地址:https://www.cnblogs.com/lichangyun/p/8507724.html
Copyright © 2011-2022 走看看