• MyBatis 安装和配置


      在这里我们使用 MyBatis 开发一个简单的 Java 项目(默认你已安装JDK和MySQL及会使用Maven的基本操作),可以与上一篇通过底层操作数据进行比较

    1、新建表 students,插入数据

    SQL Code

     1 CREATE TABLE students(
     2      stud_id INT(11) NOT NULL AUTO_INCREMENT,
     3      stud_name VARCHAR(50) NOT NULL,
     4      stud_email VARCHAR(50) NOT NULL,
     5      stud_dob DATE DEFAULT NULL,
     6      PRIMARY KEY (stud_id)
     7 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
     8 
     9 INSERT INTO students(stud_id,stud_name,stud_email,stud_dob)
    10 VALUES (1,'Student1','student1@qq.com','1992-01-01');
    11 INSERT INTO students(stud_id,stud_name,stud_email,stud_dob)
    12 VALUES (2,'Student2','student2@qq.com','1993-12-31');

    2、新建一个Maven项目,在pom.xml中引入Mybatis.jar

    2.1 创建Maven项目,名为HzMyBatis

    2.2 在pom.xml中引入相应的jar包

    pom.xml code

     1 <dependencies>
     2      <dependency>
     3        <groupId>junit</groupId>
     4        <artifactId>junit</artifactId>
     5        <version>4.11</version>
     6        <scope>test</scope>
     7      </dependency>
     8      <dependency>
     9          <groupId>org.projectlombok</groupId>
    10          <artifactId>lombok</artifactId>
    11          <version>1.18.2</version>
    12          <scope>provided</scope>
    13      </dependency>
    14      <dependency>
    15          <groupId>mysql</groupId>
    16          <artifactId>mysql-connector-java</artifactId>
    17          <version>5.1.39</version>
    18      </dependency>
    19      <dependency>
    20          <groupId>org.mybatis</groupId>
    21          <artifactId>mybatis</artifactId>
    22          <version>3.4.1</version>
    23      </dependency>
    24     <!-- 日志框架 -->
    25      <dependency>
    26          <groupId>org.slf4j</groupId>
    27          <artifactId>slf4j-api</artifactId>
    28          <version>1.7.25</version>
    29      </dependency>
    30      <dependency>
    31          <groupId>org.slf4j</groupId>
    32          <artifactId>slf4j-log4j12</artifactId>
    33          <version>1.7.25</version>
    34          <scope>test</scope>
    35      </dependency>
    36      <dependency>
    37          <groupId>log4j</groupId>
    38          <artifactId>log4j</artifactId>
    39          <version>1.2.17</version>
    40      </dependency>
    41    </dependencies>

    说明:mysql-connector-java-5.1.39 mysql数据库的驱动包、mybatis-3.4.1 Mybatis包、lombok-1.18.2 减少重复代码量(getter/setter/toString等需要注解标注)

    3、新建 mybatis-config.xml 和映射器 StudentMapper.xml 配置文件

    mybatis-config.xml:包括数据库连接信息,类型别名等信息

    StudentMapper.xml:映射的SQL语句

    这两个xml文件需要放到classpath路径下

    mybatis-config.xml Code

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     4 <configuration>
     5      <!-- 设置Bean别名 -->
     6      <typeAliases>
     7          <typeAlias alias="Student" type="com.hz.mybatis.bean.Student" />
     8      </typeAliases>
     9      
    10      <!-- 设置当前环境 -->
    11      <environments default="development">
    12          <environment id="development">
    13              <!-- 开启事务 JDBC使用数据库自己的事务(局部事务) -->
    14              <transactionManager type="JDBC" />
    15              <dataSource type="POOLED">
    16                  <property name="driver" value="com.mysql.jdbc.Driver" />
    17                  <property name="url" value="jdbc:mysql://127.0.0.1:3306/hadoop" />
    18                  <property name="username" value="root" />
    19                  <property name="password" value="root" />
    20              </dataSource>
    21          </environment>
    22      </environments>
    23      
    24      <!-- 映射文件路径 -->
    25      <mappers>
    26          <mapper resource="com/hz/mybatis/mapper/StudentMapper.xml" />
    27      </mappers>
    28 </configuration>

    StudentMapper.xml Code

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 
     5 <mapper namespace="com.hz.mybatis.mapper.StudentMapper">
     6     <resultMap type="Student" id="StudentResult">
     7         <id property="studId" column="stud_id" />
     8         <result property="name" column="stud_name" />
     9         <result property="email" column="stud_email" />
    10         <result property="dob" column="stud_dob" />
    11     </resultMap>
    12     
    13     <select id="findAllStudents" resultMap="StudentResult">
    14         SELECT * FROM STUDENTS
    15     </select>
    16     
    17     <select id="findStudentById" parameterType="java.lang.Integer" resultType="Student">
    18         SELECT STUD_ID AS STUDID, STUD_NAME AS NAME, STUD_EMAIL AS EMAIL, STUD_DOB AS DOB FROM STUDENTS WHERE STUD_ID = #{Id}
    19     </select>
    20     
    21     <insert id="insertStudent" parameterType="Student">
    22         INSERT INTO STUDENTS(STUD_ID, STUD_NAME,STUD_EMAIL,STUD_DOB)
    23         VALUES(#{studId}, #{name}, #{email}, #{dob})
    24     </insert>
    25 </mapper>

    3、新建 MyBatisSqlSessionFactory 单例模式类

    MyBatisSqlSessionFactory.java Code

    import java.io.InputStream;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
      * 创建单例SqlSessionFactory
      * @author DONG
      *
      */
    public class MyBatisSqlSessionFactory {
    
        private static SqlSessionFactory sqlSessionFactory;
         
         public static SqlSessionFactory getSqlSessionFactory(){
             if (sqlSessionFactory == null) {
                 InputStream inputStream;
                 try {
                     inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                     sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
             return sqlSessionFactory;
         }
    }

    4、新建映射器 StudentMapper 接口和 StudentService 类

    创建一个 StudentMapper 接口,其定义的方法名和在 Mapper XML 配置文件定义的 SQL 映射语 句名称相同

    创建一个 StudentService.java 类,包含了一些业务操作的实现

    1、首先, 创建 JavaBean Student.java

    Student.java Code

     1 import java.util.Date;
     2 
     3 import lombok.Data;
     4 
     5 @Data
     6 public class Student {
     7 
     8     private Integer studId;
     9      private String name;
    10      private String email;
    11      private Date dob;
    12      
    13 }

    2、创建映射器 Mapper 接口 StudentMapper.java 其方法签名和 StudentMapper.xml 中定义的 SQL 映射定义名
    相同

    StudentMapper.java Code

    1 import java.util.List;
    2 
    3 import com.hz.mybatis.bean.Student;
    4 
    5 public interface StudentMapper {
    6      List<Student> findAllStudents();
    7      Student findStudentById(Integer id);
    8      void insertStudent(Student student);
    9 }

    3、现在创建 MyBatisStudentService.java 实现对表 students 的数据库操作

     1 import java.util.List;
     2 
     3 import org.apache.ibatis.session.SqlSession;
     4 import org.slf4j.Logger;
     5 import org.slf4j.LoggerFactory;
     6 
     7 import com.hz.mybatis.bean.Student;
     8 import com.hz.mybatis.mapper.StudentMapper;
     9 import com.hz.mybatis.util.MyBatisSqlSessionFactory;
    10 
    11 /**
    12   * 学生业务操作
    13   * @author DONG
    14   *
    15   */
    16 public class MyBatisStudentService {
    17      
    18      private static Logger logger = LoggerFactory.getLogger(MyBatisStudentService.class);
    19 
    20     /**
    21       * 查询所有学生信息
    22       * @return
    23       */
    24      public List<Student> findAllStudents(){
    25          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
    26          logger.debug("获取sqlSession信息: ", sqlSession);
    27          try {
    28              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    29              return studentMapper.findAllStudents();
    30          } finally {
    31              sqlSession.close();
    32          }
    33      }
    34      
    35      /**
    36       * 通过学生ID查询学生信息
    37       * @param studId
    38       * @return
    39       */
    40      public Student findStudentById(Integer studId){
    41          logger.debug("通过学生ID查询学生信息: ", studId);
    42          
    43          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
    44          
    45          try {
    46              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    47              return studentMapper.findStudentById(studId);
    48          } finally {
    49              sqlSession.close();
    50          }
    51      }
    52      
    53      /**
    54       * 插入学生信息
    55       */
    56      public void insertStudent(Student student){
    57          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
    58          
    59          try {
    60              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    61              studentMapper.insertStudent(student);
    62          } finally {
    63              sqlSession.close();
    64          }
    65          
    66      }
    67 }

    5、新建一个 JUnit 测试类来测试 MyBatisStudentService

     1 import java.util.List;
     2 
     3 import org.junit.AfterClass;
     4 import org.junit.BeforeClass;
     5 import org.junit.Test;
     6 
     7 import com.hz.mybatis.bean.Student;
     8 import com.hz.mybatis.service.MyBatisStudentService;
     9 
    10 /**
    11   * 测试
    12   * @author DONG
    13   *
    14   */
    15 public class TestStudentMapper {
    16 
    17     private static MyBatisStudentService studentService;
    18      
    19      @BeforeClass
    20      public static void setup(){
    21          studentService = new MyBatisStudentService();
    22      }
    23      
    24      @AfterClass
    25      public static void teardown(){
    26          studentService = null;
    27      }
    28      
    29      @Test
    30      public void testFindAllStudents(){
    31          List<Student> students = studentService.findAllStudents();
    32          
    33          for (Student student : students) {
    34              System.out.println(student);
    35          }
    36      }
    37 }

    image

    欢迎志同道合朋友,加QQ群:119126035,QQ:1415583094,微信:cq1415583094
    我的GitHub:https://github.com/cq1415583094
    公众号欢迎关注

  • 相关阅读:
    re.sub函数的深入了解
    xpath
    改变评分查询
    Boolean Query
    固定分数查询
    Unicode编码的原型
    java中基本类型占用字节数
    Java Socket网络编程的经典例子(转)
    (转)工厂模式
    (转)java垃圾回收机制
  • 原文地址:https://www.cnblogs.com/chuanqi1415583094/p/9606568.html
Copyright © 2020-2023  润新知