mybatis学习之路

时间:2021-05-02 21:23:24

MyBatis 是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。

MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的domain映射成数据库中的记录。

快速入门:

1.添加jar包

mybatis-3.2.1.jar(jar包版本不能太低,太低的版本无法支持接口注解)

mysql-connector-java-5.1.8-bin.jar

2.创建表

在此使用的是mysql数据库来测试

 create table user(
     id int primary key auto_increment,
     name ),
     age int
 );

3.创建configuration.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>
     <properties resource="db.properties"></properties>
     <typeAliases>
         <typeAlias type="com.model.User" alias="User"/>
     </typeAliases>
     <environments default="development">
         <environment id="development">
             <transactionManager type="jdbc"/>
             <dataSource type="POOLED">
                 <property name="username" value="${username}"/>
                 <property name="password" value="${password}"/>
                 <property name="url" value="${url}"/>
                 <property name="driver" value="${driver}"/>
             </dataSource>
         </environment>
     </environments>
     <mappers>
         <!-- 首先使用接口注解的方式来映射 -->
         <mapper class="com.dao.UserDao"/>
     </mappers>
 </configuration>

4.定义实体类

 package com.dao;

 public class User {

     private int id;
     private String name;
     private int age;

     public int getId() {
         return id;
     }
     public void setId(int id) {
         this.id = id;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     @Override
     public String toString() {
         return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
     }
 }

5.编写接口

 public interface UserDao {

     @Select("select * from user where id=#{id}")
     public User selectById(int id);
 }

6.在已配置过的configuration.xml中配置接口映射,必须是接口的全类名

 <mappers>
     <!-- 首先使用接口注解的方式来映射 -->
     <mapper class="com.dao.UserDao"/>
 </mappers>

7.编写测试文件

 public class Main {

     public static void main(String[] args) throws IOException {
         // TODO Auto-generated method stub

         InputStream is = Main.class.getClassLoader().getResourceAsStream("configuration.xml");
         /**
          * 另一种方式读取mybatis配置文件
          * String resource="configuration.xml";
          * Reader reader = Resources.getResourceAsReader(resource);
          */
         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
         SqlSession ss = sqlSessionFactory.openSession();
         UserDao userDao = ss.getMapper(UserDao.class);

         User user = userDao.selectById(1);
         System.out.println(user);
     }
 }

以上是使用基于接口注解的方式来映射,当我们使用接口注解时,并不仅仅局限于以下配置:

 <mappers>
      <!-- 首先使用接口注解的方式来映射 -->
      <mapper class="com.dao.UserDao"/>
 </mappers>

我们还可以创建该接口的实现--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.dao.UserDao">
 </mapper>

然后将configuration.xml配置改为:

 <mappers>
     <!-- 使用xml的方式来映射 -->
     <mapper resource="com/dao/UserMapper.xml"/>
 </mappers>

注意:当使用接口定义方法,而没有提供注解时,这时的UserMapper.xml就需要配置该接口所需要的信息了:

接口:

 public interface UserDao {

     public User selectById(int id);
 }
 <?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.dao.UserDao">
     <select id="selectById" parameterType="int" resultType="User">
         select * from user where id=#{id}
     </select>
 </mapper>
 <mappers>
     <!-- 使用xml的方式来映射 -->
     <mapper resource="com/dao/UserMapper.xml"/>
 </mappers>

------------------------------------以上是使用接口方式来映射----以下使用xml方式来映射---------------------------------------------

在上面的步骤中,将第5步去掉,然后编写完整的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.dao.UserMapper">
     <select id="selectById" parameterType="int" resultType="User">
         select * from user where id=#{id}
     </select>
 </mapper>

然后将configuration.xml配置为:

 <mappers>
     <!-- 使用xml的方式来映射 -->
     <mapper resource="com/dao/UserMapper.xml"/>
 </mappers>

测试:

 public class Main {

     public static void main(String[] args) throws IOException {
         // TODO Auto-generated method stub

         InputStream is = Main.class.getClassLoader().getResourceAsStream("configuration.xml");
         /**
          * 另一种方式读取mybatis配置文件
          * String resource="configuration.xml";
          * Reader reader = Resources.getResourceAsReader(resource);
          */
         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
         SqlSession ss = sqlSessionFactory.openSession();

         User user = ss.selectOne("com.dao.UserDao.selectById", 1);
         System.out.println(user);
     }
 }

以上是快速入门情况,很多配置没有详细说,下面章节开始详细讲解MyBatis配置等!!

ps:该文章仅代码本人学习过程,希望能给想学习的或正在学习的朋友带来一定的领悟.

  欢迎大家指正错误,小弟在此感激不尽!!!