日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

01.MyBatis入门

發(fā)布時(shí)間:2023/10/11 综合教程 72 老码农
生活随笔 收集整理的這篇文章主要介紹了 01.MyBatis入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
    MyBatis入?yún)⒖嘉臋n:http://mybatis.org/mybatis-3/zh/ 

1.使用MyBatis前的準(zhǔn)備

1.增加Maven依賴
  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.37</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis</groupId>
  8. <artifactId>mybatis</artifactId>
  9. <version>3.3.0</version>
  10. </dependency>
2.數(shù)據(jù)庫(kù)建表
  1. CREATE TABLE tb_teacher
  2. (
  3. id bigint NOT NULL auto_increment COMMENT 'ID',
  4. no varchar(10) NOT NULL COMMENT '教師編號(hào)',
  5. name varchar(50) NOT NULL COMMENT '教師姓名',
  6. sex char(1) NOT NULL COMMENT '教師性別',
  7. job_title varchar(50) NOT NULL COMMENT '職稱',
  8. PRIMARY KEY (id)
  9. ) COMMENT = '教師信息表';
  10. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('001', 'Test01', 'f', '教師01');
  11. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('002', 'Test02', 'f', '教師02');
  12. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('003', 'Test03', 'f', '教師03');
3.創(chuàng)建實(shí)體類
  1. package model;
  2. import java.io.Serializable;
  3. /** 教師信息表 */
  4. public class Teacher implements Serializable
  5. {
  6. private static final long serialVersionUID = 1L;
  7. /** ID */
  8. private Long id;
  9. /** 教師編號(hào) */
  10. private String no;
  11. /** 教師姓名 */
  12. private String name;
  13. /** 教師性別 */
  14. private String sex;
  15. /** 職稱 */
  16. private String job_title;
  17. ......
  18. }

2.創(chuàng)建SqlSessionFactory

1.使用XML配置文件創(chuàng)建SqlSessionFactory
    每個(gè)基于 MyBatis的應(yīng)用都是以一個(gè)SqlSessionFactory的實(shí)例為中心的。SqlSessionFactory的實(shí)例可以通過(guò)SqlSessionFactoryBuilder獲得。而SqlSessionFactoryBuilder則可以從XML配置文件或一個(gè)預(yù)先定制的Configuration的實(shí)例構(gòu)建出SqlSessionFactory的實(shí)例。
    從XML文件中構(gòu)建SqlSessionFactory的實(shí)例非常簡(jiǎn)單,建議使用類路徑下的資源文件進(jìn)行配置。但是也可以使用任意的輸入流(InputStream)實(shí)例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來(lái)配置。MyBatis包含一個(gè)名叫Resources的工具類,它包含一些實(shí)用方法,可使從classpath或其他位置加載資源文件更加容易。
  1. String resource = "mybatis-config.xml";
  2. InputStream inputStream = Resources.getResourceAsStream(resource);
  3. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
創(chuàng)建配置文件mybatis-config.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <environments default="development">
  5. <environment id="development">
  6. <transactionManager type="JDBC" />
  7. <dataSource type="POOLED">
  8. <property name="driver" value="com.mysql.jdbc.Driver" />
  9. <property name="url" value="jdbc:mysql://localhost:3306/test" />
  10. <property name="username" value="root" />
  11. <property name="password" value="lizhiwei" />
  12. </dataSource>
  13. </environment>
  14. </environments>
  15. <mappers>
  16. <mapper resource="mapping/TeacherMapper.xml" />
  17. </mappers>
  18. </configuration>
實(shí)體類映射文件:mapping/TeacherMapper.xml:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="mapping.TeacherDao">
  4. <select id="getTeacherById" resultType="model.Teacher" parameterType="_int">
  5. select * from tb_teacher WHERE id = #{id};
  6. </select>
  7. </mapper>
2.直接使用API創(chuàng)建SqlSessionFactory
    如果你更愿意直接從Java程序而不是XML文件中創(chuàng)建configuration,或者創(chuàng)建你自己的configuration構(gòu)建器,MyBatis也提供了完整的配置類,提供所有和XML文件相同功能的配置項(xiàng)。
  1. DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
  2. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  3. Environment environment = new Environment("development", transactionFactory, dataSource);
  4. Configuration configuration = new Configuration(environment);
  5. configuration.addMapper(BlogMapper.class);
  6. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

3.創(chuàng)建SqlSession操作數(shù)據(jù)庫(kù)

1.直接使用映射文件TeacherMapper.xml中的SQL
  1. Teacher teacher = sqlSession.selectOne("mapping.TeacherDao.getTeacherById",1);
  2. System.out.println(teacher);
  3. sqlSession.close();
參數(shù)“mapping.TeacherDao.getTeacherById”就指定是TeacherMapper.xml文件中select語(yǔ)句(通過(guò)“namespace” + “id”)
2.使用接口關(guān)聯(lián)映射文件TeacherMapper.xml
創(chuàng)建接口:TeacherDao
  1. package mapping;
  2. import model.Teacher;
  3. public interface TeacherDao
  4. {
  5. public Teacher getTeacherById(int id);
  6. }
使用MyBatis的Mapper功能,獲取接口實(shí)例,并使用:
  1. TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);
  2. teacher = teacherDao.getTeacherById(2);
  3. System.out.println(teacher);
  4. sqlSession.close();
使用Mapper接口的方式,不用寫接口實(shí)現(xiàn)類接口完成數(shù)據(jù)庫(kù)操作,簡(jiǎn)單方便,此方法是官方推薦。是MyBatis一種很重要的用法。
注意:使用 Mapper 接口調(diào)用必須具備以下條件:
  1. Mapper 接口方法名 和 TeacherMapper.xml中定義的每個(gè) sql 的 id 同名。
  2. Mapper 接口方法的輸入?yún)?shù)類型和 TeacherMapper.xml中定義的 sql parameterType類型相同。
  3. Mapper 接口的輸出參數(shù)類型和 TeacherMapper.xml中 定義的 sql 的 resultType類型相同。
  4. TeacherMapper.xml文件中的 namespace即是 Mapper 接口的類路徑。

4.各種主要接口實(shí)例的生命周期

1.SqlSessionFactoryBuilder
    這個(gè)類可以被實(shí)例化、使用和丟棄,一旦創(chuàng)建了 SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder實(shí)例的最佳范圍是方法范圍(也就是局部方法變量)。你可以重用SqlSessionFactoryBuilder來(lái)創(chuàng)建多個(gè) SqlSessionFactory 實(shí)例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。
2.SqlSessionFactory
    SqlSessionFactory 一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運(yùn)行期間一直存在,沒(méi)有任何理由對(duì)它進(jìn)行清除或重建。使用 SqlSessionFactory 的最佳實(shí)踐是在應(yīng)用運(yùn)行期間不要重復(fù)創(chuàng)建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞味道(bad smell)”。因此 SqlSessionFactory 的最佳范圍是應(yīng)用范圍。有很多方法可以做到,最簡(jiǎn)單的就是使用單例模式或者靜態(tài)單例模式。
3.SqlSession
    每個(gè)線程都應(yīng)該有它自己的SqlSession實(shí)例。SqlSession的實(shí)例不是線程安全的,因此是不能被共享的,所以它的最佳的范圍是請(qǐng)求或方法范圍。絕對(duì)不能將SqlSession實(shí)例的引用放在一個(gè)類的靜態(tài)域,甚至一個(gè)類的實(shí)例變量也不行。也絕不能將SqlSession實(shí)例的引用放在任何類型的管理范圍中,比如Serlvet架構(gòu)中的HttpSession。如果你現(xiàn)在正在使用一種Web框架,要考慮SqlSession放在一個(gè)和HTTP請(qǐng)求對(duì)象相似的范圍中。換句話說(shuō),每次收到的HTTP請(qǐng)求,就可以打開一個(gè)SqlSession,返回一個(gè)響應(yīng),就關(guān)閉它。這個(gè)關(guān)閉操作是很重要的,你應(yīng)該把這個(gè)關(guān)閉操作放到finally塊中以確保每次都能執(zhí)行關(guān)閉。
4.映射器實(shí)例(Mapper Instances)
    映射器是創(chuàng)建用來(lái)綁定映射語(yǔ)句的接口。映射器接口的實(shí)例是從SqlSession中獲得的。因此從技術(shù)層面講,映射器實(shí)例的最大范圍是和SqlSession相同的,因?yàn)樗鼈兌际菑腟qlSession里被請(qǐng)求的。盡管如此,映射器實(shí)例的最佳范圍是方法范圍。也就是說(shuō),映射器實(shí)例應(yīng)該在調(diào)用它們的方法中被請(qǐng)求,用過(guò)之后即可廢棄。并不需要顯式地關(guān)閉映射器實(shí)例,盡管在整個(gè)請(qǐng)求范圍(request scope)保持映射器實(shí)例也不會(huì)有什么問(wèn)題,但是很快你會(huì)發(fā)現(xiàn),像SqlSession一樣,在這個(gè)范圍上管理太多的資源的話會(huì)難于控制。所以要保持簡(jiǎn)單,最好把映射器放在方法范圍(method scope)內(nèi)。

-------------------------------------------------------------------------------------------------------------------------------

總結(jié)

以上是生活随笔為你收集整理的01.MyBatis入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。