mybatis學習筆記之——連線SQL server資料庫(IDEA)
我們新建一個普通的專案,File --> New --> Project -->Java --> Java EE。然後新建專案即可。
專案完成後我們新建一個conf資料夾,用來存放配置資訊,新建一個lib資料夾,用來存放jar包。
我們將mybatis的jar包,連線SQL server資料庫的sqljdbc的jar包,列印日誌的log4j的jar包以及測試相關的junit的jar包複製到lib資料夾下,然後將lib資料夾下的jar包加入到專案中。
將log4j的配置檔案放到conf資料夾下:
log4j.properties:
### 設定### log4j.rootLogger = debug,stdout,D,E ### 輸出資訊到控制擡 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 輸出DEBUG 級別以上的日誌到=E://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 輸出ERROR 級別以上的日誌到=E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =D://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
在conf資料夾下增加mybatis的配置資訊檔案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.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=mybatis"/> <property name="username" value="sa"/> <property name="password" value="sa123456"/> </dataSource> </environment> </environments> <!-- 將我們寫好的sql對映檔案註冊到全域性配置檔案中 --> <mappers> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
這個配置檔案中指定了我們要連線的資料庫為SQL server資料庫,還指定了我們要連線的資料庫名,使用者名稱,密碼。sql對映檔案是要在後面寫到這裡的,這裡已經寫出,後面再描述。
我們在資料庫中新建表tbl_employee,表結構如下:
然後我們在表中插入一條資料,這裡插入的是:
INSERT INTO tbl_employee VALUES(2,0,4);
然後我們編寫相關程式碼:
首先建立實體類Employee.java:
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 + '\'' + '}'; } }
這裡的lastName和資料庫中的last_name是不相同的,會導致最後查詢出的last_name為空。
然後編寫相關介面EmployeeMapper:
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
然後我們在conf下增加一個配置檔案,用來進行sql對映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:名稱空間;指定為介面的全類名
id:唯一標識
resultType:返回值型別
#{id}:從傳遞過來的引數中取出id值
-->
<mapper namespace="com.test.mybatis.dao.EmployeeMapper">
<select id="getEmpById" resultType="com.test.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
</mapper>
這裡我們為last_name取別名為lastName,這樣我們就可以取到last_name的值了,並且在上面,我們已經將這個sql對映EmployeeMapper.xml檔案註冊到了全域性配置mybatis-config.xml檔案中。
最後我們編寫一下測試類MyBatisTest.java:
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test01() throws IOException{
//1.獲取SqlSessionFactory物件
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//2.獲取sqlSession物件
SqlSession openSession = sqlSessionFactory.openSession();
try{
//3.獲取介面的實現類物件
//會為介面自動建立一個代理物件,代理物件去執行增刪改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
}finally {
openSession.close();
}
}
}
工程結構如下圖所示:
測試結果如下圖:
我們通過控制檯輸出的類名,可以看出這裡會為介面自動建立一個代理物件,代理物件去執行增刪改查方法。
最後總結一下:
1.介面式程式設計。
原生 Dao ===》 DaoImpl
mybatis Mapper ===》 xxMapper.xml
2.sqlSession代表和資料庫的一次會話,完成後需要將資源釋放。
3.sqlSession和connection一樣,都是非執行緒安全的。每次使用都應該去獲取新的物件,不要設定為成員變數。
4.mapper介面沒有實現類,但是mybatis會為這個介面生成一個代理物件(將介面和xml檔案繫結)。
5.兩個重要的配置檔案:
mybatis的全域性配置檔案:包含資料庫連線池資訊,事務管理資訊等。系統執行環境資訊。
SQL對映檔案:儲存了每一個SQL的語句對映資訊。通過此對映檔案將sql抽取出來。
注:此文章為【尚矽谷_MyBatis_入門到進階】學習筆記。原視訊中是Java程式碼,連線的資料庫是Mysql,開發工具為eclipse。因個人學習需求,此文章為Java程式碼,但是資料庫是SQL server,開發工具用的是IDEA。