Hello Mybatis 01 第一個CRUD


What's the Mybatis?

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis iBATIS一詞來源於internet”abatis”的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL MapsData Access ObjectsDAO).

自己使用mybatis有大半年了,相比較厚重的hibernate和其他orm框架,mybatis更加的靈活輕巧,可以更好的配合數據庫和sql語句來開發項目。

這篇開始,我希望可以寫一個關於mybatis的快速教程,除了mybatis,中間還會貫穿一些mysql的資料和mybatis與其他框架的配置,這個系列也算是自己這段時間對使用mybatis框架的一個總結。

環境搭建

我使用的環境有

  mysql:mysql5.5.37

  jdk:openjdk1.7

  eclipse:java ee-Kepler Service Release 2

 

我們還需要在mysql數據庫中建立一個名字叫做blogschema,並建立一個user表

1 CREATE TABLE `blog`.`user` (
2   `id` INT NOT NULL AUTO_INCREMENT,
3   `name` VARCHAR(45) NULL,
4   `age` INT NULL,
5   PRIMARY KEY (`id`));

 

 還要記得給這個表加幾條數據喲

1 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('Mybatis', '4');
2 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('struts2', '7');
3 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('hibernate', '13');

 

接着我們在eclipse中新建一個web項目。

jdbc的驅動包mysql-connector-java-5.1.30-bin.jar放置到web-inf下的lib文件夾中去。

再到mybatisgithub的主頁上下載mybatisjar包.

https://github.com/mybatis/mybatis-3/releases

我使用的版本是3.2.3(最新的版本是3.2.7 

當然,你也可以使用maven來管理mybatis的包,只需要在項目的pom.xml中添加.

1 <dependency>
2   <groupId>org.mybatis</groupId>
3   <artifactId>mybatis</artifactId>
4   <version>3.2.3</version>
5 </dependency>

 

第一個CRUD

我們在pro.app下新建一個model包,新建一個user類與數據庫相對應的vo類。

 1 package pro.app.model;
 2 
 3 public class User {
 4     private int id;
 5     private String name;
 6     private int age;
 7     public User(){}
 8     public User(String name, int age) {
 9         this.name = name;
10         this.age = age;
11     }
12     public int getId() {
13         return id;
14     }
15     public void setId(int id) {
16         this.id = id;
17     }
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public int getAge() {
25         return age;
26     }
27     public void setAge(int age) {
28         this.age = age;
29     }
30 }

 

pro.app.inter下建立UserDAO接口,在這個接口中定義一個根據id找到User的方法selectOne()

 

1 package pro.app.inter;
2 import org.apache.ibatis.annotations.Param;
3 
4 import pro.app.model.User;
5 
6 public interface UserDAO {
7     public User selectOne(@Param("id")Integer id);
8 }

pro.app.mapper下建立UserMapper.xml文件。

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 <mapper namespace="pro.app.inter.UserDAO">
5     <select id="selectOne" parameterType="int" resultType="User">
6         select * from user where id = #{id,jdbcType=INTEGER}
7     </select>
8 </mapper>

<select></select>標簽對來定義對應UserDAO中的selectOne()方法需要執行的sql語句。這也是mybatis的核心功能。

 現在我們還需要在src源目錄下放置一個Configuration.xml文件用於mybatis的配置。

<?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>
    <typeAliases>
        <typeAlias alias="User" type="pro.app.model.User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/blog?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="mybatis"/>
                <property name="password" value="mybatis"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper   resource="pro/app/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

 在配置文件中通過定義現在的environment , 來指定目前的開發狀態,用jdbc作為事務和連接池的配置與mysql數據庫相鏈接。

 在mappers下寫入需要用到的mybatis 需要用到的mapper文件。

 

 現在我們可以建立一個類測試mybatis是不是工作了,在pro.test下建立一個userTest類。

 1 package pro.app.test;
 2 
 3 import java.io.Reader;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 import pro.app.inter.UserDAO;
11 import pro.app.model.User;
12 
13 public class UserTest {
14     private static SqlSessionFactory sqlSessionFactory;
15     private static Reader reader; 
16     static{
17         try{
18             reader= Resources.getResourceAsReader("Configuration.xml");
19             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
20         }catch(Exception e){
21             e.printStackTrace();
22         }
23     }
24     public static SqlSessionFactory getSession(){
25         return sqlSessionFactory;
26     }
27     public static void main(String[] args) {
28         SqlSession session = sqlSessionFactory.openSession();
29         try {
30             UserDAO userDao = session.getMapper(UserDAO.class);
31             User user = userDao.selectOne(1);
32             System.out.println("name : "+user.getName());
33             System.out.println("age : "+user.getAge());
34         } finally {
35             session.close();
36         }
37     }
38 }

在這個程序中,我們通過io類庫中的Reader類來讀取mybatis的相關配置文件,並且使用mybatis里的 SqlSessionFactoryBuilder類構建一個SqlSessionFactory。

這個SqlSessionFactory就相當與mybatis配置文件的化生了,對應各種被操作的類而言,它就是整個項目中的上帝了,上帝不能老是出現吧,所以一般在一個項目中指揮有一個SqlSessionFactory出現。接着我們的程序又通過SqlSessionFactory來獲得一個SqlSession,SqlSession 對象完全包含以數據庫為背景的所有執行 SQL 操作的方法。通過這個SqlSession的實例化對象,可以獲得UserDAO接口的一個實例,接下來就可以執行相應的方法了。

來運行這個程序啦,控制台輸出了以下內容

1 name : mybatis
2 age : 4

 bingo!我們如願通過mybatis獲得了數據庫的數據。

 

 接下來我們可以在UserDAOUserMapper中添加其他的配置完成CRUD的任務。

 UserMapper.xml

 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 <mapper namespace="pro.app.inter.UserDAO">
 5     <select id="selectOne" parameterType="int" resultType="User">
 6         select * from user where id = #{id,jdbcType=INTEGER}
 7     </select>
 8     <insert id="insertOne" parameterType="User">
 9         insert into user (name,age)
10         values(
11             #{name,jdbcType=VARCHAR},
12             #{age,jdbcType=INTEGER}
13         )
14     </insert>
15     <delete id="deleteOne" parameterType="java.lang.Integer" >
16         delete from user
17         where id = #{id,jdbcType=INTEGER}
18     </delete>
19     <update id="updateOne" parameterType="User">
20     update user
21     set name=#{name,jdbcType=VARCHAR},
22     age=#{age,jdbcType=INTEGER}
23     where id= #{id,jdbcType=INTEGER}
24    </update>
25 </mapper>

UserDAO.java

 1 package pro.app.inter;
 2 import org.apache.ibatis.annotations.Param;
 3 
 4 import pro.app.model.User;
 5 
 6 public interface UserDAO {
 7     public User selectOne(@Param("id")Integer id);
 8     
 9     public void insertOne(User user);
10     
11     public void deleteOne(@Param("id")Integer id);
12     
13     public void updateOne(User user);
14 }

select方法一樣,通過updatedeleteinsert標簽分別對updateOne()deleteOne()insertOne()方法,並編寫相應的接口方法來實現對應的CRUD任務。

 

總結

通過一個簡單的CRUD例子熟悉mybatis的基本實現。

 


免責聲明!

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



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