依賴以下java
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
複製代碼
MyBatis應用是以SqlSessionFactory爲中心的,實例能夠經過SqlSessionFactoryBuilder得到. 其中SqlSessionFactory是工廠接口,任務用於建立SqlSession 配置文件將會解析配置XML文件在Configuration類對象中.mysql
在resource文件下新建mybatis-config.xml文件 配置文件內容以下sql
<?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 type="com.ming.Role" alias="role"/>
</typeAliases>
<!-- 定義數據庫信息 -->
<environments default="development">
<environment id="development">
<!-- jdbc事物管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 數據庫連接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/>
<property name="username" value="mybatis"/>
<property name="password" value="ABCcba20170607"/>
</dataSource>
</environment>
</environments>
</configuration>
複製代碼
新建類數據庫
package com.ming;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class Role {
public String getSqlSessionFactory(){
String resource = "mybatis-config.xml";
try {// 得到輸入流
InputStream inputStream;
inputStream = Resources.getResourceAsStream(resource);
// 得到SqlSessionFactory工廠
SqlSessionFactory sqlSessionFactory = null;
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
return null;
}
}
複製代碼
最後新建測試類apache
package com.ming;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class RoleTest {
private Role role = null;
@Before
public void setUp() throws Exception {
this.role = new Role();
}
@After
public void tearDown() throws Exception {
}
@Test
public void getSqlSessionFactory() {
role.getSqlSessionFactory();
}
}
複製代碼
此時的目錄結構 緩存
public SqlSessionFactory getSqlSessionFactory1(){
// 建立數據庫鏈接池
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");
dataSource.setUsername("mybatis");
dataSource.setPassword("ABCcba20170607");
// 構建數據庫事物
TransactionFactory transactionFactory = new JdbcTransactionFactory();
// 建立數據庫環境
Environment environment = new Environment("development", transactionFactory, dataSource);
// 構建Configuration對象
Configuration configuration = new Configuration(environment);
// 註冊上下文別名
configuration.getTypeAliasRegistry().registerAlias("role", Role.class);
// 建立映射器
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory;
}
複製代碼
書寫測試用例以下安全
package com.ming;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class RoleTest {
private Role role = null;
@Before
public void setUp() throws Exception {
this.role = new Role();
}
@After
public void tearDown() throws Exception {
}
@Test
public void getSqlSessionFactory() {
role.getSqlSessionFactory();
}
@Test
public void getSqlSessionFactory1() {
role.getSqlSessionFactory1();
}
}
複製代碼
SqlSession屬於門面,經過SqlSession能夠得到須要的什麼信息bash
SqlSession sqlSession = null;
try{
// 建立一個sqlsession會話
sqlSession = sqlSessionFactory.openSession();
sqlSession.commit();
}catch (Exception e){
// 輸出錯誤信息
System.out.println(e.getMessage());
// 進行事物操做,回滾數據庫數據
sqlSession.rollback();
}finally {
// 進行資源關閉
if(sqlSession != null){
sqlSession.close();
}
}
複製代碼
SqlSession做用,獲取映射器,經過命名信息執行sql結果session
映射器由java和xml文件共同組成,做用 定義參數類型 描述緩存 描述sql 定義查詢結果和POJO映射關係mybatis
先給出java接口
package com.ming;
public interface RoleMapper {
public Role getRole(Long id);
}
複製代碼
根據給定的id獲取角色對象
給出映射文件,而後在生成的時候會根據接口實現類,生成對象.
先編寫POJO
package com.ming;
// POJO
public class Role {
private int id;
private String roleName;
private String note;
public void setId(int id) {
this.id = id;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public void setNote(String note) {
this.note = note;
}
public int getId() {
return id;
}
public String getRoleName() {
return roleName;
}
public String getNote() {
return note;
}
}
複製代碼
在編寫映射配置文件
<?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.ming.RoleMapper">
<!-- 定義的接口方法爲getRole 類型參數爲long 返回的結果爲role 即以前定義在xml文件中定義的vo別名 -->
<select id="getRole" parameterType="int" resultType="role">
<!-- 定義sql語句-->
SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}
</select>
</mapper>
複製代碼
最後編寫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 type="com.ming.Role" alias="role"/>
</typeAliases>
<!-- 定義數據庫信息 -->
<environments default="development">
<environment id="development">
<!-- jdbc事物管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 數據庫連接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/>
<property name="username" value="mybatis"/>
<property name="password" value="ABCcba20170607"/>
</dataSource>
</environment>
</environments>
<!-- 定義映射器 -->
<mappers>
<mapper resource="RoleMapper.xml"></mapper>
</mappers>
</configuration>
複製代碼
最後再編寫執行sql的類
package com.ming;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import java.io.IOException;
import java.io.InputStream;
public class MyBatis {
public String getSqlSessionFactory(){
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = null;
try {// 得到輸入流
InputStream inputStream;
inputStream = Resources.getResourceAsStream(resource);
// 得到SqlSessionFactory工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
SqlSession sqlSession = null;
try{
// 建立一個sqlsession會話
sqlSession = sqlSessionFactory.openSession();
// 得到映射器
// 接口傳入映射器中
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
// 執行方法
Role role = roleMapper.getRole(0);
System.out.println(role.getRoleName());
// 刷新語句並提交連接
sqlSession.commit();
}catch (Exception e){
// 輸出錯誤信息
System.out.println(e.getMessage());
// 進行事物操做,回滾數據庫數據
sqlSession.rollback();
}finally {
// 進行資源關閉
if(sqlSession != null){
sqlSession.close();
}
}
return null;
}
public SqlSessionFactory getSqlSessionFactory1(){
// 建立數據庫鏈接池
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");
dataSource.setUsername("mybatis");
dataSource.setPassword("ABCcba20170607");
// 構建數據庫事物
TransactionFactory transactionFactory = new JdbcTransactionFactory();
// 建立數據庫環境
Environment environment = new Environment("development", transactionFactory, dataSource);
// 構建Configuration對象
Configuration configuration = new Configuration(environment);
// 註冊上下文別名
configuration.getTypeAliasRegistry().registerAlias("role", MyBatis.class);
// 建立映射器
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory;
}
}
複製代碼
最後編寫測試類
package com.ming;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class MyBatisTest {
private MyBatis myBatis = null;
@Before
public void setUp() throws Exception {
this.myBatis = new MyBatis();
}
@After
public void tearDown() throws Exception {
}
@Test
public void getSqlSessionFactory() {
myBatis.getSqlSessionFactory();
}
@Test
public void getSqlSessionFactory1() {
myBatis.getSqlSessionFactory1();
}
}
複製代碼
執行單元測試 結果以下
即完成了MyBatis的一次查詢
定義接口
package com.ming;
import org.apache.ibatis.annotations.Select;
public interface Role1 {
@Select (value="SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}")
public Role getRole(int id);
}
複製代碼
其是利用xml或者java編碼構建SqlSessionFactory 能夠構建多個SessionFactory 做用 構建器 根據構建器得到sqlSessionFactory
建立SqlSession 一個SqlSession至關於JDBC的Connection對象 此爲單例管理 每建立一個SqlSession就會建立一個數據庫鏈接
此爲一個會話,至關於一個Connection鏈接 線程不安全 生命週期爲一個應用的請求和操做,能夠執行多條sql