01.MyBatis入门
生活随笔
收集整理的這篇文章主要介紹了
01.MyBatis入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MyBatis入參考文檔:http://mybatis.org/mybatis-3/zh/
1.使用MyBatis前的準備
1.增加Maven依賴
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency>
2.數據庫建表
CREATE TABLE tb_teacher(id bigint NOT NULL auto_increment COMMENT 'ID',no varchar(10) NOT NULL COMMENT '教師編號',name varchar(50) NOT NULL COMMENT '教師姓名',sex char(1) NOT NULL COMMENT '教師性別',job_title varchar(50) NOT NULL COMMENT '職稱',PRIMARY KEY (id)) COMMENT = '教師信息表';INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('001', 'Test01', 'f', '教師01');INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('002', 'Test02', 'f', '教師02');INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('003', 'Test03', 'f', '教師03');
3.創建實體類
package model;import java.io.Serializable;/** 教師信息表 */public class Teacher implements Serializable{private static final long serialVersionUID = 1L;/** ID */private Long id;/** 教師編號 */private String no;/** 教師姓名 */private String name;/** 教師性別 */private String sex;/** 職稱 */private String job_title;......}
2.創建SqlSessionFactory
1.使用XML配置文件創建SqlSessionFactory
每個基于 MyBatis的應用都是以一個SqlSessionFactory的實例為中心的。SqlSessionFactory的實例可以通過SqlSessionFactoryBuilder獲得。而SqlSessionFactoryBuilder則可以從XML配置文件或一個預先定制的Configuration的實例構建出SqlSessionFactory的實例。
從XML文件中構建SqlSessionFactory的實例非常簡單,建議使用類路徑下的資源文件進行配置。但是也可以使用任意的輸入流(InputStream)實例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置。MyBatis包含一個名叫Resources的工具類,它包含一些實用方法,可使從classpath或其他位置加載資源文件更加容易。
String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
創建配置文件mybatis-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><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/test" /><property name="username" value="root" /><property name="password" value="lizhiwei" /></dataSource></environment></environments><mappers><mapper resource="mapping/TeacherMapper.xml" /></mappers></configuration>
實體類映射文件:mapping/TeacherMapper.xml:
<?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="mapping.TeacherDao"><select id="getTeacherById" resultType="model.Teacher" parameterType="_int">select * from tb_teacher WHERE id = #{id};</select></mapper>
2.直接使用API創建SqlSessionFactory
如果你更愿意直接從Java程序而不是XML文件中創建configuration,或者創建你自己的configuration構建器,MyBatis也提供了完整的配置類,提供所有和XML文件相同功能的配置項。
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory, dataSource);Configuration configuration = new Configuration(environment);configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
3.創建SqlSession操作數據庫
1.直接使用映射文件TeacherMapper.xml中的SQL
Teacher teacher = sqlSession.selectOne("mapping.TeacherDao.getTeacherById",1);System.out.println(teacher);sqlSession.close();
參數“mapping.TeacherDao.getTeacherById”就指定是TeacherMapper.xml文件中select語句(通過“namespace” + “id”)
2.使用接口關聯映射文件TeacherMapper.xml
創建接口:TeacherDao
package mapping;import model.Teacher;public interface TeacherDao{public Teacher getTeacherById(int id);}
使用MyBatis的Mapper功能,獲取接口實例,并使用:
TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);teacher = teacherDao.getTeacherById(2);System.out.println(teacher);sqlSession.close();
使用Mapper接口的方式,不用寫接口實現類接口完成數據庫操作,簡單方便,此方法是官方推薦。是MyBatis一種很重要的用法。
注意:使用 Mapper 接口調用必須具備以下條件:
- Mapper 接口方法名 和 TeacherMapper.xml中定義的每個 sql 的 id 同名。
- Mapper 接口方法的輸入參數類型和 TeacherMapper.xml中定義的 sql parameterType類型相同。
- Mapper 接口的輸出參數類型和 TeacherMapper.xml中 定義的 sql 的 resultType類型相同。
- TeacherMapper.xml文件中的 namespace即是 Mapper 接口的類路徑。
4.各種主要接口實例的生命周期
1.SqlSessionFactoryBuilder
這個類可以被實例化、使用和丟棄,一旦創建了 SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder實例的最佳范圍是方法范圍(也就是局部方法變量)。你可以重用SqlSessionFactoryBuilder來創建多個 SqlSessionFactory 實例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。
2.SqlSessionFactory
SqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在,沒有任何理由對它進行清除或重建。使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞味道(bad smell)”。因此 SqlSessionFactory 的最佳范圍是應用范圍。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。
3.SqlSession
每個線程都應該有它自己的SqlSession實例。SqlSession的實例不是線程安全的,因此是不能被共享的,所以它的最佳的范圍是請求或方法范圍。絕對不能將SqlSession實例的引用放在一個類的靜態域,甚至一個類的實例變量也不行。也絕不能將SqlSession實例的引用放在任何類型的管理范圍中,比如Serlvet架構中的HttpSession。如果你現在正在使用一種Web框架,要考慮SqlSession放在一個和HTTP請求對象相似的范圍中。換句話說,每次收到的HTTP請求,就可以打開一個SqlSession,返回一個響應,就關閉它。這個關閉操作是很重要的,你應該把這個關閉操作放到finally塊中以確保每次都能執行關閉。
4.映射器實例(Mapper Instances)
映射器是創建用來綁定映射語句的接口。映射器接口的實例是從SqlSession中獲得的。因此從技術層面講,映射器實例的最大范圍是和SqlSession相同的,因為它們都是從SqlSession里被請求的。盡管如此,映射器實例的最佳范圍是方法范圍。也就是說,映射器實例應該在調用它們的方法中被請求,用過之后即可廢棄。并不需要顯式地關閉映射器實例,盡管在整個請求范圍(request scope)保持映射器實例也不會有什么問題,但是很快你會發現,像SqlSession一樣,在這個范圍上管理太多的資源的話會難于控制。所以要保持簡單,最好把映射器放在方法范圍(method scope)內。
-------------------------------------------------------------------------------------------------------------------------------
來自為知筆記(Wiz)
總結
以上是生活随笔為你收集整理的01.MyBatis入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python之小数据池
- 下一篇: Qt 中文编译错误和运行显示乱码