• mybatis之DAO层自动实现接口


    * 使用mybatis举例,使用DAO接口方式实现
    * 不需要针对接口去编写具体的实现类代码,编写映射XML文件,直接拿来使用即可。
    * 1、导入jar包:mybatis和mysql-connector
    * 2、mybatis配置文件:mybatis-config.xml,加载映射XML文件
    * 3、编写JavaBean类,如UserBean
    * 4、编写DAO接口和映射XML文件(namespace=DAO接口文件路径、id=接口方法名)

    mybatis-config-dao.xml
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!--从外部配置文件导入jdbc信息-->
     7     <properties resource="jdbc.properties"></properties>
     8 
     9     <environments default="development">
    10         <environment id="development">
    11             <transactionManager type="JDBC"/>
    12             <dataSource type="POOLED">
    13                 <property name="driver" value="${driver}"/>
    14                 <property name="url" value="${url}"/>
    15                 <property name="username" value="${username}"/>
    16                 <property name="password" value="${password}"/>
    17             </dataSource>
    18         </environment>
    19     </environments>
    20 
    21     <!--指定映射资源文件-->
    22     <mappers>
    23         <mapper resource="dao/DaoMapper.xml"/>
    24 
    25     </mappers>
    26 </configuration>

    DaoMapper.xml
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 
     6 <mapper namespace="dao.UserDao">
     7     <!--id:名称; parameterType传入参数类型; resultType:返回数据类型-->
     8     <select id="selectOneUser" parameterType="int" resultType="bean.User">
     9         select * from user where id = #{id}
    10     </select>
    11 
    12     <!--批量查询-->
    13     <select id="selectAllUser" resultMap="userList">
    14         select * from user
    15     </select>
    16     <resultMap type="bean.User" id="userList">
    17         <result property="id" column="id"/>
    18         <result property="name" column="name"/>
    19         <result property="age" column="age"/>
    20     </resultMap>
    21 
    22     <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    23         insert into user (id, name, age) values (#{id} ,#{name}, #{age})
    24     </insert>
    25 
    26     <update id="updateUser">
    27       update user set name=#{name},age=#{age} where id=#{id}
    28    </update>
    29 
    30     <delete id="deleteUser">
    31         delete from user where id=#{id}
    32     </delete>
    33 
    34     <!-- 传入多个参数时,自动转换为map形式 -->
    35     <insert id="insertByColumns" useGeneratedKeys="true" keyProperty="id">
    36         insert into user (id, name, age) values (NULL ,#{param1}, #{param2})
    37     </insert>
    38     <insert id="insertByZhuJie" useGeneratedKeys="true" keyProperty="id">
    39         insert into user (id, name, age) values (NULL ,#{name}, #{age})
    40     </insert>
    41     <insert id="insertByMap" useGeneratedKeys="true" keyProperty="id">
    42         insert into user (id, name, age) values (NULL ,#{name}, #{age})
    43     </insert>
    44 
    45 </mapper>

    UserDao.java
     1 package dao;
     2 
     3 import bean.User;
     4 import org.apache.ibatis.annotations.Param;
     5 
     6 
     7 import java.util.List;
     8 import java.util.Map;
     9 
    10 /*
    11 * 使用mybatis举例,使用DAO接口方式实现
    12 * 不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
    13 * */
    14 public interface UserDao {
    15 
    16     // 根据id查询单一数据
    17     public User selectOneUser(int id);
    18 
    19     // 查询所有用户
    20     public List<User> selectAllUser();
    21 
    22     // 插入数据
    23     public int insertUser(User user);
    24 
    25     // 修改用户
    26     public int updateUser(User user);
    27 
    28     // 删除用户
    29     public int deleteUser(User user);
    30 
    31     // 插入数据;多参数三种方式:默认Map、使用Map传参和使用注解别名
    32     public int insertByColumns(String name, int age);
    33     public int insertByZhuJie(@Param("name") String name, @Param("age") int age);
    34     public int insertByMap(Map map);
    35 
    36 }

    TestDao.java
      1 package dao;
      2 
      3 import bean.User;
      4 import org.apache.ibatis.io.Resources;
      5 import org.apache.ibatis.session.SqlSession;
      6 import org.apache.ibatis.session.SqlSessionFactory;
      7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      8 import org.junit.After;
      9 import org.junit.Before;
     10 import org.junit.Ignore;
     11 import org.junit.Test;
     12 
     13 import java.io.IOException;
     14 import java.io.InputStream;
     15 import java.util.HashMap;
     16 import java.util.List;
     17 import java.util.Map;
     18 
     19 /*
     20 * 使用mybatis举例,使用DAO接口方式实现
     21 * 不需要针对接口去编写具体的实现类代码,编写映射XML文件,直接拿来使用即可。
     22 * 1、导入jar包:mybatis和mysql-connector
     23 * 2、mybatis配置文件:mybatis-config.xml,加载映射XML文件
     24 * 3、编写JavaBean类,如UserBean
     25 * 4、编写DAO接口和映射XML文件(namespace=DAO接口文件路径、id=接口方法名)
     26 * */
     27 public class TestDao {
     28     String resource = "mybatis-config-dao.xml";
     29     SqlSessionFactory sqlSessionFactory = null;
     30     SqlSession session = null;
     31 
     32     @Before
     33     public void before() {
     34 //        System.out.println("Before");
     35         try {
     36             InputStream inputStream = Resources.getResourceAsStream(resource);
     37 //            创建工厂
     38             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
     39 //            创建session对象
     40             session = sqlSessionFactory.openSession();
     41 
     42         } catch (IOException e) {
     43             e.printStackTrace();
     44         }
     45     }
     46 
     47     @After
     48     public void close() {
     49         session.close();
     50 //        System.out.println("After");
     51     }
     52 
     53     @Test
     54     public void testSelectOneUser() {
     55 //        接口自动实例化
     56         UserDao userDao = session.getMapper(UserDao.class);
     57 //        执行sql
     58         User user = userDao.selectOneUser(1);
     59         System.out.println(user);
     60     }
     61 
     62     //    批量查询
     63     @Test
     64     public void testSelectAllUser() {
     65 //        接口自动实例化
     66         UserDao userDao = session.getMapper(UserDao.class);
     67 //        执行sql
     68         List<User> listUser = userDao.selectAllUser();
     69         System.out.println("记录个数:" + listUser.size());
     70         System.out.println(listUser);
     71     }
     72 
     73     //   插入数据
     74     @Ignore
     75     @Test
     76     public void testInsertUser() {
     77         UserDao userDao = session.getMapper(UserDao.class);
     78         User user = new User("AA", "29");
     79         int n = userDao.insertUser(user);
     80         session.commit();
     81         System.out.println("插入数据:" + user);
     82         System.out.println(n);
     83     }
     84 
     85     // 修改数据
     86     @Ignore
     87     @Test
     88     public void testUpdateUser() {
     89         UserDao userDao = session.getMapper(UserDao.class);
     90         User user = new User(2, "Tom5", "29");
     91         int n = userDao.updateUser(user);
     92         session.commit();
     93         System.out.println("修改数据:" + user);
     94         System.out.println(n);
     95     }
     96 
     97     // 修改数据
     98     @Ignore
     99     @Test
    100     public void testDeleteUser() {
    101         UserDao userDao = session.getMapper(UserDao.class);
    102         User user = new User(13, "XX", "XX");
    103         int n = userDao.deleteUser(user);
    104         session.commit();
    105         System.out.println("删除数据:" + user);
    106         System.out.println(n);
    107     }
    108 
    109     //   多参数插入数据的三种方式
    110     @Ignore
    111     @Test
    112     public void testInsertByColumns() {
    113         UserDao userDao = session.getMapper(UserDao.class);
    114         String name = "insertByColumns";
    115         int age = 33;
    116 //        int n = userDao.insertByColumns(name, age);
    117 //        int n = userDao.insertByZhuJie(name, age);
    118 
    119         Map map = new HashMap();
    120         map.put("name", name);
    121         map.put("age", age);
    122         int n = userDao.insertByMap(map);
    123 
    124         session.commit();
    125         System.out.println("插入数据name:" + name);
    126         System.out.println(n);
    127     }
    128 
    129 
    130 }
    User.java
     1 package bean;
     2 
     3 /**
     4  * 数据封装类
     5  * JavaBean
     6  */
     7 public class User {
     8     private int id;
     9     private String name;
    10     private String age;
    11 
    12     public User() {
    13 
    14     }
    15 
    16     public User(String name, String age) {
    17         this.name = name;
    18         this.age = age;
    19     }
    20     public User(int id, String name, String age) {
    21         this.id = id;
    22         this.name = name;
    23         this.age = age;
    24     }
    25 
    26     public String getName() {
    27         return name;
    28     }
    29 
    30     public void setName(String name) {
    31         this.name = name;
    32     }
    33 
    34     public String getAge() {
    35         return age;
    36     }
    37 
    38     public void setAge(String age) {
    39         this.age = age;
    40     }
    41 
    42     public int getId() {
    43         return id;
    44     }
    45 
    46     public void setId(int id) {
    47         this.id = id;
    48     }
    49 
    50     @Override
    51     public String toString() {
    52         return "User{id:" + id + "; 姓名:" + name + "; 年龄:" + age + "}";
    53     }
    54 }
  • 相关阅读:
    编码以及⼩知识点补充
    基本数据类型(dict)
    基本数据类型(list,tuple)
    python基础
    Eclipse使用技巧
    条件与(&&)和逻辑与(&)以及条件或(||)和逻辑或(|)区别
    到底怎么样才叫看书?——Tony Zhao's
    Jsp servlet 值传递。。
    (06)odoo报表
    (05)odoo数据库和业务操作
  • 原文地址:https://www.cnblogs.com/gongxr/p/8288212.html
Copyright © 2020-2023  润新知