創建實體類:
package com.test.mybatis.bean; public class Employee { private Integer id; private String lastName; private String email; private String gender; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]"; } }
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> <!-- 1、mybatis可以使用properties來引入外部配置文件的內容 resource:引入類路徑下的資源 url:引入網絡路徑或者磁盤路徑下的資源 --> <properties resource="jdbcconf.properties"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </properties> <!-- 2、settings包含很多的設置項 setting:用來設置每一個設置項 name:設置項名 value:設置項取值 --> <settings> <!-- 駝峰命名規則:當數據庫名與實體類名發生不一致時,駝峰命名則會發揮作用 如: 數據庫字段:id stuname 實體類屬性:id stuName --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 3、typeAliases:別名處理器,可以為Java類型起別名 別名不區分大小寫 --> <typeAliases> <!-- type:指定要起別名的類型全類名;默認別名就是類名小寫: alias:指定新的別名 --> <!-- <typeAlias type="com.test.mybatis.Employee" alias="emp"/> --> <!-- package:為某個包下的所有類批量起別名 也可在具體的實體類中使用@Alias注解為某個類型指定新的別名 --> <package name="com.test.mybatis.bean"/> </typeAliases> <!-- 4、environments:配置環境,可配置多種環境(development,test) environment:配置一個具體的環境信息,必須有兩個標簽; id:代表當前環境的唯一標識 transactionManager:事務管理器 type:事務管理器的類型;JDBC\MANAGED 自定義事務管理:實現TransactionFactory接口,type指定為全類名 DataSource: 數據源 type: 數據源類型 UNPOOLED(UnpooledDataSourceFactory) POOLED(PooledDataSourceFactory) JNDI(JndiDataSourceFactory) --> <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> <!-- 5、databaseIdProvider:支持多數據庫廠商 type="DB_VENDOR" 作用就是得到數據庫廠商標識,mybatis就能根據不同的數據庫廠商標識,執行不同的SQL語句 MySQL Oracle SQL Server --> <databaseIdProvider type="DB_VENDOR"> <!-- 為不同數據庫廠商起別名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider> <!-- 將我們寫好的sql映射文件(EmployeeMapper.xml)一定要注冊到 mybatis-config.xml中--> <!-- 6、mappers:將sql映射注冊到全局配置中 --> <mappers> <!-- `mapper:注冊一個sql映射 注冊配置文件 resource:引用類路徑下的sql映射文件 url:引用網絡路徑或者磁盤路徑下的sql映射文件 class:引用(注冊)接口 1、必須有sql映射文件,映射文件名必須和接口同名,切放在與接口同一個目錄下 2、沒有sql映射,所有sql都是利用注解寫在接口上(@Select() @Insert() @Update @Delete) --> <mapper resource="EmployeeMapper.xml"/> <!-- <mapper class="com.test.mybatis.dao.EmployeeMapper.xml"/> --> <!-- 批量注冊 :映射文件名必須和接口同名,且在同一個包下 --> <!-- <package name="com.test.mybatis.dao"/> --> </mappers> </configuration>
數據庫信息的配置:
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
創建接口:
package com.test.mybatis.dao; import com.test.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer id); public boolean addEmployee(Employee employee); public boolean modifyEmployee(Employee employee); public boolean removeEmployee(Integer id); }
實現接口:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mtbatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.mybatis.dao.EmployeeMapper"> <!-- namespace:名稱空間 指定為接口的全類名 id:唯一標識 resultType:返回值類型 #{id}:從傳遞過來的參數中去吃id值 databaseId:標識數據庫執行環境 --> <!-- 若此兩種方法同時存在,則會默認使用帶有數據庫廠商標識的方法 若存在三種方法,則默認加載當前數據庫環境下的帶有廠商標識的方法和未帶標識的方法 --> <select id="getEmpById" resultType="employee"> select * from tbl_employee where id=#{id} </select> <select id="getEmpById" resultType="employee" databaseId="mysql"> select * from tbl_employee where id=#{id} </select> <insert id="addEmployee" parameterType="employee"> insert into tbl_employee(email,last_name,gender) values(#{email},#{lastName},#{gender}) </insert> <update id="modifyEmployee"> update tbl_employee set email=#{email}, last_name=#{lastName}, gender=#{gender} where id=#{id} </update> <delete id="removeEmployee"> delete from tbl_employee where id=#{id} </delete> </mapper>
測試:
package com.test.mybatis.test; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import com.test.mybatis.dao.EmployeeMapper; public class MyBatisTest { //讀取配置文件,得到SQLSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException{ String resource="mybatis-config.xml"; InputStream is=Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(is); } @Test public void test01() throws IOException{ //獲取sqlSessionFactory對象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //獲取sqlSession //代表和數據庫的一次對話,用完必須關閉,相當於connection,都是非線程安全。每次使用都應該獲取新的對象 SqlSession openSession = sqlSessionFactory.openSession(); try{ //獲取接口的實現類對象 //會為接口自動的創建一個代理對象,代理對象去執行增刪查改方法 //mapper接口沒有實現類,但是mybatis會為這個接口生成一個代理對象 //(將接口和xml進行綁定) EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //查詢操作 // Employee emp = mapper.getEmpById(1); //添加操作 // Employee employee=new Employee(); // employee.setEmail("6789@test.com"); // employee.setGender("2"); // employee.setLastName("test01"); // boolean flag = mapper.addEmployee(employee); //修改操作 // Employee emp=new Employee(); // emp.setLastName("tommer"); // emp.setId(6); // boolean flag = mapper.modifyEmployee(emp); //刪除操作,mybatis會根據所執行結果的影響行數,或者記錄數,去確定返回值是否為true(影響行數或記錄數>=1)\false(影響行數或記錄數<1) Boolean flag= mapper.removeEmployee(3); //增刪改查完成后一定要手動提交 openSession.commit(); System.out.println(flag); }finally{ openSession.close(); } } }