<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/neuedu/mapper/EmployeeMapper.xml" /> </mappers> </configuration>
- 建立測試用例,.複製mybatis官方文檔代碼,代碼以下:java
public class TestMyBatis { @Test public void test() { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource);//從配置文件中讀取一個流 } catch (IOException e) { e.printStackTrace(); } //利用這個流建立一個sqlSessionFactory對象,也就是總控文件建立了這個對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //和數據庫創建的一次會話,經過openSession,建立一個sqlsession對象 SqlSession sqlsession = sqlSessionFactory.openSession(); try { //selectOne查詢一條記錄,第一個參數時sql語句的惟一標識,第二個參數時sql要用的參數 //爲了確保惟一標識惟一,因此在前面寫上namespace,由於namesapce惟一 //若是第二個參數"4"在數據庫中找不到的話,不會報錯,返回null Object selectOne = sqlsession.selectOne("com.neuedu.MyBatis.EmployeeMapper.selectStudentById",4 ); System.out.println(selectOne); } finally { sqlsession.close(); } } }
- 建立sql語句的映射文件EmployeeMapper.xml;mysql
<mapper namespace="com.neuedu.MyBatis.EmployeeMapper"> <!-- namespace:名稱空間,隨便起一個名,可是要惟一 id:sql 語句的惟一標識 #{id}:接收參數傳遞過來的id值 resultType:將 sql語句返回成什麼對象 --> <select id="selectStudentById" resultType="com.neuedu.entity.Employee"> select * from student where id = #{id} </select> </mapper>
HelloWorld----接口式編程 git
public interface EmployeeMapper { /* * 增刪改查方法 * */ public Employee getEmployeeById(Integer id); }
- 經過mapper.xml的 namespace 相關聯github
<mapper namespace="com.neuedu.mapper.EmployeeMapper"> <!-- namespace:將sql映射文件和Mapper接口進行關聯 id:要和相對應的mapper接口的方法名保持一致 #{id}:從參數中獲取id resultType:將 sql語句返回成什麼對象 --> <!-- public Employee getEmployeeById(Integer id); --> <select id="getEmployeeById" resultType="com.neuedu.entity.Employee"> select * from student where id = #{id} </select> </mapper>
- sqlSession 對象表示服務器和數據庫的一次會話,是一個非線程安全的,因此不能定義在類中,定義在類中,多線程的狀況下會有多個線程共用,一次使用獲取一次 ,保證時線程安全的spring
private SqlSessionFactory getSqlSessionFactory(){ String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource);//從配置文件中讀取一個流 } catch (IOException e) { e.printStackTrace(); } //利用這個流建立一個sqlSessionFactory對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); return sqlSessionFactory; }
- 測試sql
@Test public void test01(){ //1.獲取sqlSessionFactory對象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //2.利用sqlSessionFactory建立一個session對象,表示和數據庫的一次會話 SqlSession session = sqlSessionFactory.openSession(); //3.用session對象獲取mapper接口的代理對象 //由於sql映射文件給相應的接口建立了一個代理對象,因此mapper接口類不須要實現類 EmployeeMapper mapper = session.getMapper(EmployeeMapper.class); //經過mapper接口的代理對象就能夠對數據庫進行增刪改查操做 Employee employee = mapper.getEmployeeById(4); System.out.println(employee); session.close(); }
之前都是須要爲接口寫一個實現類,可是此時,mybatis提供了接口能夠與sql配置文件動態綁定!數據庫
<!--將接口與xml文件進行綁定 --> EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
<configuration> <!-- mybatis可使用properties來引入外部properties配置文件的內容 resource:引入類路徑下的資源 url:引入網絡路徑或者磁盤路徑下的資源 --> <properties resource="jdbc.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> </environments> <!-- 將咱們寫好的sql映射文件必定要註冊到全局配置文件中,文件用/,類用.,也就是若是是class就用.分隔 --> <mappers> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
<!-- settings標籤能夠設置多個屬性值 --> <settings> <!-- setting標籤負責每個屬性的設置 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
<!-- typeAliases能夠爲多個類起別名 --> <typeAliases> <!-- 別名處理器,能夠爲某個java類型設置別名 默認是該類名的首字母小寫,別名不區分大小寫 alias:能夠經過該屬性單獨指定別名--> <!-- <typeAlias type="com.neuedu.entity.Employee" alias="asd"/> --> <!-- 用package能夠批量爲類起別名 --> <!-- 批量起別名的狀況下,使用@Alias註解爲某個實體類指定新的別名 --> <package name="com.neuedu.entity"/> </typeAliases>
雖然有這麼多的別名可使用:可是建議仍是使用全類名,看SQL語句是怎麼被封裝爲JAVA 對象的時候簡單!apache
<!-- environments:環境們,mybatis能夠配置多種環境,default指定使用某種環境。能夠達到快速切換環境。 environment:配置一個具體的環境信息;必須有兩個標籤;id表明當前環境的惟一標識 transactionManager:事務管理器 type:事務管理器的類型;type="[JDBC|MANAGED]"),這兩個都是別名,在Configuration類中能夠查看具體類!可是Spring對事務的控制纔是最終的管理方案! 固然也能夠自定義事務管理器:只須要和人家同樣實現TransactionFactory接口,type指定爲全類名。 dataSource:數據源 type:type="[UNPOOLED|POOLED|JNDI]" 自定義數據源:實現DataSourceFactory接口,type也是全類名 可是咱們也說了,不管是事務管理器的配置仍是數據源的配置咱們都會使用spring來作,這裏只須要了解一下便可! --> <environments default="development"> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.passowrd}"/> </dataSource> </environment> </environments>
<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle"/> <property name="MySQL" value="mysql"/> </databaseIdProvider>
<select id="getEmployeeById" resultType="emp"> select * from tbl_employee where id = #{id} </select> <select id="getEmployeeById" resultType="emp" databaseId="mysql"> select * from tbl_employee where id = #{id} </select> <select id="getEmployeeById" resultType="emp" databaseId="oracle"> select * from tbl_employee where id = #{id} </select>
<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> <environment id="dev_oracle"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
8.mapper映射編程
<!-- mappers:將sql映射註冊到全局配置中 --> <mappers> <!-- mapper:註冊一個sql映射 註冊配置文件: resource:引用類路徑下的sql映射文件 mybatis/mapper/EmployeeMapper.xml url:引用網絡路徑下或者磁盤路徑下的sql映射文件 url="file:///var/mappers/AuthorMapper.xml" 註冊接口 class:引用(註冊)接口: 1.有sql映射文件,映射文件名必須和接口同名,而且放在與接口同一個目錄下(能夠在conf下見一個同名的包,放在裏面); 2.沒有sql映射文件,全部的sql都是利用註解寫在接口方法上; 推薦: 比較重要的,複雜的Dao接口咱們來寫sql映射文件 不重要,見到的Dao接口爲了開發快速可使用註解 --> <!-- <mapper class="com.neuedu.mapper.EmployeeMapper"/> --> <mapper resource="com/neuedu/mapper/EmployeeMapper.xml"/> <!-- 批量註冊: 對於sql 映射文件和接口須要保證在同一個包下,且名字必須相同 --> <package name="com.neuedu.mapper"/> </mappers>
public interface EmployeeMapper { /* * 增刪改查方法 * */ @Select("select * from student where id = #{id}") public Employee getEmployeeById(Integer id); }
public class C3P0DateSource extends UnpooledDataSourceFactory{ public C3P0DateSource() { this.dataSource = new ComboPooledDataSource(); } }
<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="com.neuedu.datasource.C3P0DateSource"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>