1. 程式人生 > >Mybatis用法詳解(配置和註解的使用)

Mybatis用法詳解(配置和註解的使用)

mybatis是持久層框架

使用方法(基於xml配置)

1.新增依賴(Maven)
<!--資料庫相關, mysql, mybatis-->
    <!--jdbc連線-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.37</version>
    </dependency>
    <!--spring-mybatis  -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>${mybatis-spring-version}</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis-version}</version>
    </dependency>
     <!--反射生成實體類-->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.2</version>
    </dependency>

2.建立資料庫、表
CREATE DATABASE testdatabase;
USE testdatabase;
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, userName VARCHAR(20) NOT NULL, userAge INT NOT NULL);
INSERT INTO user(userName, userAge) VALUES('Xiaoxin', 21);
INSERT INTO user(userName, userAge) VALUES('Xiaoming', 22);
3.表的實體類
package com.xiaoxin.demo.dto;

public class User {
	private int id;
    private String userName;
    private int userAge;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", userAge=" + userAge + "]";
	}
}

4.新增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="com.xiaoxin.demo.dto.User"/> 
    </typeAliases> 
	<!-- 資料庫環境配置-->
    <environments default="development">
        <environment id="development">
        <!-- jdbc管理-->
        <transactionManager type="JDBC"/>
         <!-- 用什麼連線池-->
            <dataSource type="POOLED">
             <!-- jdbc驅動-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <!-- 資料庫名字url-->
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdatabase" />
            <!-- 資料庫使用者-->
            <property name="username" value="root"/>
            <!-- 資料庫使用者密碼-->
            <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <!-- 把User.xml註冊到mybatis的配置檔案中,User.xml下面配置 -->
    <mappers>
        <mapper resource="com/xiaoxin/demo/dto/User.xml"/>
    </mappers>
</configuration>

5.定義操作user表的對映檔案,第四步已經註冊到mybatis的配置檔案中去了
<?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">
<!-- 定義操作user表的sql對映檔案userMapper.xml  -->
<mapper namespace="com.xiaoxin.demo.dto">
    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from `User` where id = #{id}
    </select>
</mapper>

6.測試
package com.xiaoxin.demo.dto;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class TestUser {
	@Test
	public void testUser() throws Exception{
		 SqlSessionFactory sqlSessionFactory;
	     Reader reader; 
	     String resource = "spring/configuration.xml";
	     //載入一個流
	     reader= Resources.getResourceAsReader(resource);
	     //生成sqlSessionFactory工廠
	     sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	     SqlSession session = sqlSessionFactory.openSession();
	     User user =(User) session.selectOne("com.xiaoxin.demo.dto.selectUserByID", 1);
	     System.out.print(user.toString());
	    session.close();
		
	}
	

}

連線資料庫成功查詢到資料

CRUD操作彙總
<?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">
<!-- 定義操作users表的sql對映檔案userMapper.xml  -->
<mapper namespace="com.xiaoxin.demo.dto">
    <!--查詢  -->
     <select id="selectUserAll" parameterType="int" resultType="User">
        select * from user
    </select>
    <!--插入  -->
    <insert id="insertUser" parameterType="com.xiaoxin.demo.dto.User">
    		insert into user(userName,userAge) values(#{userName},#{userAge});
    </insert>
	<!--更新  -->
    <update id="updateUser" parameterType="com.xiaoxin.demo.dto.User">
    		update user set userAge=#{userAge},userName=#{userName} where id=#{id}
    </update>
    <!--刪除  -->
    <delete id="deleteUser" parameterType="int">
    	delete from user where id=#{id}
    </delete>
    
</mapper>
測試
package com.xiaoxin.demo.dto;

import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class TestUser {
	@Test
	public void testUser() throws Exception{
		 SqlSessionFactory sqlSessionFactory;
	     Reader reader; 
	     String resource = "spring/configuration.xml";
	     //載入一個流
	     reader= Resources.getResourceAsReader(resource);
	     //生成sqlSessionFactory工廠
	     sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	     SqlSession session = sqlSessionFactory.openSession();
	     //插入
//	     User user1 = new User();
//	     user1.setUserName("Xiaohong");
//	     user1.setUserAge(20);
//	     session.insert("com.xiaoxin.demo.dto.insertUser", user1);
//	     // session.commit();一定要執行不然在資料庫中沒有資訊!!!!!
//	     session.commit();
	    //更新
	     //把Xiaohong的姓名改為Xiaohong101年齡改為44 Xiaohong的id是13
//	     User user3 = new User();
//	     user3.setUserName("Xiaohong101");
//	     user3.setUserAge(44);
//	     user3.setId(16);
//	     session.update("com.xiaoxin.demo.dto.updateUser",user3);
//	     session.commit();
	     
	    //刪除
	     session.delete("com.xiaoxin.demo.dto.deleteUser",16);
	     session.commit();
	     //查詢資料庫全部的資訊
	     List<User> user2 = session.selectList("com.xiaoxin.demo.dto.selectUserAll");
	     for(User user:user2){
	    	 System.out.println(user.toString());
	     }
	    session.close();
		
	}
	

}
以上自己測試過全部成功,但是xml的配置過程中自己出錯了很多,除錯了很多次才成功調試出來,下面學習基於註解的寫法

Mybatis的註解用法

1.定義SQL對映的介面
package com.xiaoxin.demo.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.xiaoxin.demo.dto.User;

public interface UserMapper {
	@Select("select * from user")
	public List<User> getSelectUser();
	@Update("UPDATE user set userName=#{userName},userAge=#{userAge} where id=#{id}")
	public void getUpdateUser(User user);
	@Insert("insert into user(userName,userAge) values(#{userName},#{userAge});")
	public void getInsertUser(User user);
	@Delete("DELETE FROM user where id=#{id}")
	public void getDeleteUser(int id);
	

}
2.在mybatis的配置檔案中註冊這個對映介面(注意是class!!)
 <mappers>
        <mapper resource="com/xiaoxin/demo/dto/User.xml"/>
        <mapper class="com.xiaoxin.demo.mapper.UserMapper"></mapper>
    </mappers>

在Dao類中呼叫(這裡是測試)
package com.xiaoxin.demo.dto;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.xiaoxin.demo.mapper.UserMapper;

public class TestUserAnnotation {
	
	@Test
	public void testUser() throws IOException{
		
		 SqlSessionFactory sqlSessionFactory;
	     Reader reader; 
	     String resource = "spring/configuration.xml";
	     //載入一個流
	     reader= Resources.getResourceAsReader(resource);
	     //生成sqlSessionFactory工廠
	     sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	     SqlSession session = sqlSessionFactory.openSession();
	     
	     UserMapper userMapper = session.getMapper(UserMapper.class);
	     //插入
//	     User user = new User();
//	     user.setUserName("xinxin");
//	     user.setUserAge(20);
//	     userMapper.getInsertUser(user);
//	     session.commit();
	     //刪除
//	     userMapper.getDeleteUser(21);
//	     session.commit();
	     //更新將id為19的姓名不變 年齡改為23
//	     User user = new User();
//	     user.setId(19);
//	     user.setUserName("xinxin");
//	     user.setUserAge(23);
//	     userMapper.getUpdateUser(user);
//	     session.commit();
	     //查詢
	     List<User> users = userMapper.getSelectUser();
	     for(User user2 :users){
	    	 System.out.println(user2.toString());
	     }
	     session.close();
	}

}

測試成功