第一章、認識框架
1. MyBatis框架介紹
Mybatis最大的特點是把Sql陳述句寫在XML組態檔當中,而且Mybatis執行完Sql陳述句之后可以以物件形式回傳(POJO/POJO集合等),
2. 從 XML 中構建 SqlSessionFactory
SqlSessionFactory 的實體可以通過 SqlSessionFactoryBuilder 獲得,而 SqlSessionFactoryBuilder 則可以從 XML 組態檔或一個預先配置的 Configuration 實體來構建出 SqlSessionFactory 實體,
String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3. 從 SqlSessionFactory 中獲取 SqlSession
SqlSession session = sqlSessionFactory.openSession()
第二章、Mybatis框架快速入門案例
1. 添加依賴、配置編譯環境
<dependencies> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <!--編譯插件,配置資訊--> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build>
2. 添加 db.properties、log4.j.properties、mybatis-config.xml、EmployeeMapper.xml
(1) db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useSSL=false username=root password=root
(2)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> <!-- properties標簽:引入外部組態檔 resource:配置properties組態檔的路徑 --> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!-- mapper:配置SQL陳述句組態檔的路徑,resource配置SQL陳述句的檔案路徑和檔案名 --> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
(3) EmployeeMapper.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"> <!-- namespace:命名空間,值可以隨意寫 當有多個xxxMapper時,需要確保namespace唯一性 --> <mapper namespace="com.atguigu.pojo.EmployeeMapper"> <select id="queryEmployeeById" parameterType="Integer" resultType="com.atguigu.pojo.Employee"> select * from employee where id = 1 </select> </mapper>
3. 創建pojo類
@Data public class Employee { private Integer id; private String name; private Double salary; }
4. 測驗類
@Test public void testQueryEmployeeById() throws IOException { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(); Object o = sqlSession.selectOne("com.atguigu.pojo.EmployeeMapper.queryEmployeeById"); System.out.println(o); }
第三章、Mybatis框架實作資料的CURD
1. 匯入依賴和maven編譯環境插件
<dependencies> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!--lombook--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build>
2. 添加組態檔
db.properties、EmployeeMapper.xml、log4j.properties、mybatis-config.xml
(1) db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useSSL=false username=root password=root
(2) EmployeeMapper.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="employeeMapper"> <!--1.1查詢所有員工資訊--> <!-- select標簽:配置查詢陳述句 resultType屬性:"查詢資料表后的結果集" parameterType屬性:"SQL陳述句的引數的資料型別",8個基本資料類,及其包裝類,和字串型別,直接寫類名即可 (不區分大小寫) SQL陳述句的引數: 有2種寫法 #{} ${} #{} 防止SQL的注入攻擊,提供SQL的執行效率 ${} 一般不使用,${}直接做了字串拼接 --> <select id="queryEmployee" resultType="Employee"> select * from employee </select> <!--1.2查詢員工資訊,根據id刷選--> <select id="queryEmployeeById" parameterType="Integer" resultType="Employee"> select * from employee where id = #{id} </select> <!--1.3查詢員工,根據名字模糊查詢--> <select id="queryEmployeeByLikeName" parameterType="String" resultType="Employee"> select * from employee where name like #{name} </select> <!--2.1修改員工資料--> <update id="updateEmployeeById" parameterType="Employee"> update employee set name = #{name},salary = #{salary} where id = #{id} </update> <!--3.1洗掉員工資料--> <update id="deleteEmployeeById" parameterType="Integer"> delete from employee where id = #{id} </update> <!-- insert:配置新增的SQL陳述句 insert,update,delete 執行結果都是行數,資料型別固定位int無需配置結果集 parameterType屬性: SQL陳述句有引數的,引數存盤在JavaBean物件 注意: SQL陳述句的引數占位符 #{},引數是參考資料型別, JavaBean物件的欄位名字 --> <!--4.1 插入資料--> <insert id="insertEmployee" parameterType="Employee"> insert into Employee values(#{id},#{name},#{salary}) </insert> <!--4.2 插入資料獲取自動增長的主鍵列--> <!-- 配置新增的SQL陳述句,獲取新增的主鍵值,MySQL支持自動增長 useGeneratedKeys屬性: 是否使用新增的主鍵,屬性的默認值是false,寫成true keyProperty屬性: 獲取新增主鍵的存盤位置,填寫"javaBean物件的欄位名" --> <insert id="insertEmployeeGetAutoKey" parameterType="Employee" keyProperty="id" useGeneratedKeys="true"> insert into Employee values(#{id},#{name},#{salary}) </insert> <!--4.3 插入資料,獲取不自動增長的主鍵列--> <!-- selectKey:配置獲取新增的主鍵,資料庫不支持自動增長的配置方式 keyProperty屬性: 獲取新增主鍵的存盤位置,填寫"javaBean物件的欄位名" resultType屬性: 配置新增主鍵的資料型別 order屬性:順序,獲取新增主鍵的SQL陳述句的執行順序,在insert之前還是之后 --> <insert id="insertEmployeeGetNoAutoKey" parameterType="Employee"> <selectKey keyProperty="id" resultType="Integer" order="AFTER" > select last_insert_id() </selectKey> insert into employee values(#{id},#{name},#{salary}) </insert> </mapper>
(3) 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> <!--引入外部組態檔--> <properties resource="db.properties"></properties> <!--配置包掃描--> <typeAliases> <package name="com.atguigu.pojo"/> <!--<typeAlias type="com.atguigu.pojo.Employee" alias="Employee"/>--> </typeAliases> <!-- environments:配置資料源環境 資料源環境分為:開發環境(development)、測驗環境(test)、生產環境(produce) default屬性:配置默認的資料源環境 --> <environments default="development"> <!-- environments:配置單個開發環境 id屬性:配置開發環境 --> <environment id="development"> <!-- transactionManager:事務管理器 type屬性: type="JDBC":配置含義,MyBatis框架使用的是最原始的JDBC事務管理 Connection介面的方法:setAutoCommit,commit,rollback type="MANAGERED":的含義:MyBaits框架不使用事物 將框架事務管理拋出去,交給其他框架處理,Spring框架AOP,切面編程 --> <transactionManager type="JDBC"/> <!-- dataSource:配置連接池 type="POOLED" 使用連接池 type="UNPOOLED" 不使用連接池,使用第三方連接池,druid,c3p0,dbcp --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!--配置Mapper映射檔案路徑--> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
2. 創建pojo類
package com.atguigu.pojo; import lombok.Data; @Data public class Employee { private Integer id; private String name; private Double salary; }
3. 測驗類
public class MainTest { private SqlSessionFactory sqlSessionFactory; @Before public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } //1.1查詢所有員工資訊 @Test public void queryEmployee(){ SqlSession sqlSession = sqlSessionFactory.openSession(); List<Employee> employeeList = sqlSession.selectList("employeeMapper.queryEmployee"); for (Employee employee : employeeList) { System.out.println("employee = " + employee); } sqlSession.close(); } //1.2查詢員工資訊,根據id刷選 @Test public void queryEmployeeById(){ SqlSession sqlSession = sqlSessionFactory.openSession(); Employee employee = sqlSession.selectOne("employeeMapper.queryEmployeeById", 1); System.out.println("employee = " + employee); sqlSession.close(); } //1.3查詢員工,根據名字模糊查詢 @Test public void queryEmployeeByLikeName(){ SqlSession sqlSession = sqlSessionFactory.openSession(); List<Employee> employeeList = sqlSession.selectList("employeeMapper.queryEmployeeByLikeName", "%o%"); for (Employee employee : employeeList) { System.out.println("employee = " + employee); } sqlSession.close(); } //2.1修改員工資料 @Test public void updateEmployeeById(){ SqlSession sqlSession = sqlSessionFactory.openSession(); Employee employee = new Employee(); employee.setId(6); employee.setName("孫尚香"); employee.setSalary(890D); sqlSession.insert("employeeMapper.updateEmployeeById",employee); sqlSession.commit(); sqlSession.close(); } //3.1洗掉員工資料 @Test public void deleteEmployeeById(){ SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("employeeMapper.deleteEmployeeById",11); sqlSession.commit(); sqlSession.close(); } //4.1 插入資料 @Test public void insertEmployee(){ SqlSession sqlSession = sqlSessionFactory.openSession(); Employee employee = new Employee(); employee.setName("孫權"); employee.setSalary(6879D); sqlSession.insert("employeeMapper.insertEmployee",employee); System.out.println("employee = " + employee); sqlSession.commit(); sqlSession.close(); } //4.2 插入資料獲取自動增長的主鍵列 @Test public void insertEmployeeGetAutoKey(){ SqlSession sqlSession = sqlSessionFactory.openSession(); Employee employee = new Employee(); employee.setName("孫權"); employee.setSalary(6879D); sqlSession.insert("employeeMapper.insertEmployeeGetAutoKey",employee); System.out.println("employee = " + employee); sqlSession.commit(); sqlSession.close(); } //4.3 插入資料,獲取不自動增長的主鍵列 @Test public void insertEmployeeGetNoAutoKey(){ SqlSession sqlSession = sqlSessionFactory.openSession(); Employee employee = new Employee(); employee.setName("孫權"); employee.setSalary(6879D); sqlSession.insert("employeeMapper.insertEmployeeGetNoAutoKey",employee); System.out.println("employee = " + employee); sqlSession.commit(); sqlSession.close(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/348153.html
標籤:Java
上一篇:JVM-記憶體區域與OOM
下一篇:多賬號統一登陸,怎么實作?
