mybatis從入門到精通(一) 入門


mybatis從入門到精通(一) 入門

一丶什么是mybatis

   MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。

-- 資料來源於官方文檔

 

二丶入門文檔資料

   官方入門文檔

  (mybatis其實很簡單, 有一定編程基礎的可以直接查看官方文檔, 進行學習, 筆者認為這是一種進步, 可以獲得第一手資料)  

 

 

三丶准備開發環境

  1. 筆者使用idea開發工具新建maven項目(至於如何安裝使用idea開發工具, 可以直接百度, 本文不做介紹),  然后在maven倉庫中搜索mybatis對應的坐標, 筆者使用的版本如下

       <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

  可以將上面maven坐標復制到pom.xml文件中, 筆者完整的pom.xml配置文件可以點此查看

 

  2. 准備mysql數據庫

  可以直接mysql官網下載社區版,(至於如何安裝使用, 可以直接百度, 本文不做介紹). 可以使用mysql workbench 或者navicat等數據庫界面工具導入執行user.sqlemail.sql兩個數據腳本, 至此環境准備結束

 

 

四丶准備mybatis配置文件

  在resources文件夾新建mybatis-config.xml配置文件和datasource.properties數據源屬性文件

  

  mybatsi-config.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="datasource.properties" />
    
    <!-- 添加日志實現 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
        
        <!-- 是否開啟下划線和駝峰式的自動轉換, http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
        
    
    <environments default="development">
        <environment id="development" >
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
   
    
</configuration>

 

   datasource.properties, 注意, username, password改成自身數據庫對應的賬號密碼

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=root

 

  為方便調試, 添加log4j日志配置, 需要與mybatis-config.xml中的配置一致, 同時需要在pom.xml文件中引入對應的jar包

  log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

# mybatis 打印sql
log4j.logger.com.ttx.example.mapper=DEBUG

 

 

五丶准備數據庫表實體類和對應的mapper文件

  1. 在src/main/java中新建實體類, User

  

public class User {
    private Integer userId;
    private String userName;
    private Integer age;
    private String country;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

 

   2.新建mapper接口類文件UserMapper, 並寫下查詢方法, 參數為userId, 注意, 當參數為多個時, 需要使用@Param注解標明參數的名稱

public interface UserMapper {
    
    User selectUser(@Param("userId") int userId);
}

  

  3. 新建mapper對應的查詢語句映射文件UserMapper.xml ,

    注意, 名稱需要和上一步的類名一致

    其中, resultMap為查詢結果的映射配置, 用於指定數據表字段名和user實體類屬性名的映射關系, id指明該字段為數據唯一標識

    <select>元素對應查詢語句, id對應上一步中的查詢方法名,  resultMap指定如何映射轉換查詢結果, 

    'select * from user where user_id = #{userId}' 為查詢語句, #{userId} 為查詢的參數, 和上一步中的@Param("userId")對應

<?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.ttx.example.mapper.UserMapper">
    <resultMap id="UserMap" type="com.ttx.example.entity.User">
        <id column="user_id" property="userId"/>
        <result column="user_name" property="userName"/>
        <result column="age" property="age"/>
        <result column="country" property="country"/>
    </resultMap>
    <sql id="baseColumn">
        user_id, user_name, age, country
    </sql>
    
    <select id="selectUser" resultMap="UserMap">
        select * from user where user_id = #{userId}
    </select>
    
    
</mapper>

 

 

六丶在mybatis-config.xml中添加UserMapper.xml映射文件

  注意, <mappers>元素在<environments>元素下方

   <mappers>
        <mapper resource="com/ttx/example/mapper/UserMapper.xml"/>
    </mappers>

 

 

 七丶使用junit測試框架測試本demo

   需要在pom.xml文件中引入對應的jar包

       <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

   在src/test中新建對應的測試類

  

 

  

public class MybatisTests {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    
    @Before
    public void init() throws IOException {
        //讀取mybatis-config.xml配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //根據配置文件創建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        this.sqlSession=sqlSessionFactory.openSession();
        this.userMapper=sqlSession.getMapper(UserMapper.class);
    }

    @After
    public void destroy(){
        this.sqlSession.close();
    }
    
    
    @Test
    public void selectTest(){
        // 查詢
        User user=userMapper.selectUser(1);
        sqlSession.commit();
        
        System.out.println("name: "+user.getUserName()+", age: "+user.getAge());

        Assert.assertEquals(new Integer(1), user.getUserId());
    }
}

 

  最后運行selectTest()方法即可

  運行結果為:

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 41489123.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@27912e3]
DEBUG [main] - ==>  Preparing: select * from user where user_id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)'socket'
DEBUG [main] - <==      Total: 1
name: ttx, age: 11
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@27912e3]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@27912e3]
DEBUG [main] - Returned connection 41489123 to pool.

 

   注意事項, service層的通用模板如下, 本文的測試用例並沒有這樣寫

    SqlSession sqlSession=null;
        try{
            
            sqlSession=sqlSessionFactory.openSession(); //默認是開啟事務, 不自動提交
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
            
            User user=userMapper.selectUser(1);
            
            sqlSession.commit(); //提交事務
            
        }catch (Exception e){
            e.printStackTrace();
            if(sqlSession!=null){
                sqlSession.rollback(); //出現異常, 回滾
            }
        }finally {
            if(sqlSession!=null){
                sqlSession.close();  // 需要關閉連接
            }
        }

 

 

  完整源碼: 點此查看

 

學習資料:

  mybatis官方入門文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM