MyBatis接口式編程
阿新 • • 發佈:2018-07-16
應該 -- batis namespace finally on() 進行 develop oct 代碼清單及總結
接口
/**
* 這是一個接口
* @author guozhenZhao
* @date 2018年7月16日
*/
public interface EmployeeMapper {
public Employee getEmployeeById(Integer id);
}
全局配置文件
<?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> <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/mybatis?useSSL=false" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 將我們寫好的sql映射文件(testEmployeeMapper.xml)註冊到全局配置文件(mybatis-config.xml)中 --> <mappers> <mapper resource="testEmployeeMapper.xml" /> </mappers> </configuration>
sql映射文件
<?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.zgz.MyBatis.dao.EmployeeMapper"> <!-- namespace: 名稱空間 id: 唯一標識 resultType: 返回值類型 #{id}: 從傳遞過來的參數中取出id值 在MyBatis中,接口可以與配置文件實現動態綁定,綁定方式: 1. 把namespace指定為接口的全類名 2. 把id換成接口中的方法,可以把select標簽和接口中的方法進行綁定 --> <select id="getEmployeeById" resultType="com.zgz.MyBatis.bean.Employee"> select id,last_name lastName,email,gender from tbl_employee where id = #{id} </select> </mapper>
測試方法:
/** * 兩種方式: * 1. 普通的HelloWorld * 2. 接口式編程(推薦) * 原生: Dao ===》 DaoImpl * MyBatis: Mapper ===》 xxMapper.xml * 3. SqlSession代表和數據庫的一次會話,使用完必須關閉 * 4. SqlSession和connection一樣都是非線程安全的,每次使用都應該去獲取新的對象,不能使用成員變量的形式去創建他 * SqlSession sqlSession = null; 是錯誤的 * 5. mapper接口沒有實現類,將該接口和配置文件綁定後,MyBatis會生成該接口的一個代理對象 * 6. 兩個重要的配置文件: * 6.1 mybatis全局配置文件:包含數據庫連接池信息,事務管理信息...系統運行環境信息等等 * 6.2 sql映射文件,保存了每一個sql語句的映射信息 * @author guozhenZhao * @date 2018年7月16日 */ public class MyBatisTest { // 獲取SqlSessionFactory對象 private SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test() throws IOException { // 1. 根據xml配置文件(全局配置文件)創建一個SqlSessionFactory對象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 2.1 獲取sqlSession實例,能直接執行已經映射的sql語句 SqlSession openSession = sqlSessionFactory.openSession(); /** * 2.2 第一個參數sql的唯一標識:名稱空間加上id 第二個參數是執行sql要用的參數 */ try { Employee employee = openSession.selectOne("com.zgz.mybatis.EmployeeMapper.selectEmp", 1); System.out.println(employee); } finally { openSession.close(); } } @Test public void test01() throws IOException { // 1. 獲取SqlSessionFactory對象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); // 2. 獲取SqlSession對象 SqlSession openSession = sqlSessionFactory.openSession(); try { // 3. 獲取接口的實現類對象 // 打印結果:$Proxy5,是一個代理對象,發現MaBatis會為接口自動創建一個代理對象,代理對象去執行CRUD EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); System.out.println(mapper.getClass()); Employee employee = mapper.getEmployeeById(1); System.out.println(employee); } finally { openSession.close(); } } }
MyBatis接口式編程