編寫一個簡單的mybatis進行插入數據的實例
1 數據庫建表 其中建表dob=Date of Birth 的意思
1
2
3
4
5
6
|
create table students (stud_id number primary key, name varchar2( 20 ), email varchar2( 20 ), dob date ); |
Oracle數據庫中出現表已創建,則表示創建成功,如果出現名稱已被使用,則可在建表之前進行刪除操作:drop table students;或者進行級聯刪除drop table students cascade constraints;然后再重新創建
2 新建一個項目
2.1 創建好相應的package及class,其中Student是我們要進行插入的對象,由于數據類型和數據庫中的值進行了對應,因此我們能夠進行將一整個對象進行插入,因此我們使用pojo類進行封裝對象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package com.mybatis.pojo; import java.util.Date; public class Student { private Integer studId; private String name; private String email; private Date dob; public Student() {} //注意無參的構造器 public Student(Integer studId, String name, String email, Date dob) { this .studId = studId; this .name = name; this .email = email; this .dob = dob; } public Integer getStudId() { return studId; } public void setStudId(Integer studId) { this .studId = studId; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getEmail() { return email; } public void setEmail(String email) { this .email = email; } public Date getDob() { return dob; } public void setDob(Date dob) { this .dob = dob; } @Override public String toString() { return "Student [studId=" + studId + ", name=" + name + ", email=" + email + ", dob=" + dob + "]" ; } } |
3 項目中引入mybatis的核心包以及可選的依賴包
文件下載:mybatis包下載
最新版下載:https://github.com/mybatis/mybatis-3/releases
必須的包 mybatis-3.3.0.jar ojdbc14.jar
可選的包 junit-4.7.jar log4j-1.2.17.jar
其中mybatis-3.3.0.jar 用于實現mybatis提供的功能,ojdbc14.jar用于連接數據庫,junit-4.7.jar用于實現功能測試,log4j-1.2.17.jar用于進行日志記錄
如下圖所示:在項目目錄下建立一個新的文件夾jar,將需要導入的包進行復制粘貼到jar目錄下邊
注意:在本地存放這些jar包時不要使用中文
然后再右鍵選中jar目錄下的四個文件,點擊添加“buildPath->add Path”,就能夠看到如下界面:表示添加路徑成功
4 項目中引入mybatis配置文件dtd約束文件
同樣的,在項目下新建dtd目錄,將約束文件復制到目錄下即可,如下圖所示:dtd文件結構,dtd文件下載:
http://download.csdn.net/download/suwu150/9660699
dtd文件的作用是對配置文件xml進行約束,這樣的話程序員就能按照規范書寫xml文件,mybatis就能夠正確的讀取并解析,以上dtd是配置本地的,當然我們也能夠使用官網的連接進行約束
5 mybatis中的配置文件和映射文件分別引入到項目中
1) src下面的mybatis-config.xml:
首先我們對本地dtd約束進行關聯,如下圖進入到Preferences下面,在搜索框中輸入xml,選中xml catalog配置名,然后點擊右邊的add按鈕
出現如下圖所示界面,其中Location位置和key位置為空,下圖是配置過的,key內容為-//mybatis.org//DTD Config 3.0//EN,Location內容為自己的,可以通過Workspace進行選擇,也就是我們前面復制到項目中的dtd文件(第4步操作中的):
點擊OK,現在我們能夠進行xml配置文件的書寫,添加約束的作用就是對程序員的書寫進行規范,以保證mybatis能夠正常解析
如下圖所示:選中src右鍵創建新文件mybatis-config.xml
注意:xml文件開頭必須置頂,前面不能有空格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!-- 進行dtd約束,其中- //mybatis.org//DTD Config 3.0//EN為公共約束, http: //mybatis.org/dtd/mybatis-3-config.dtd為獲取網絡中提供的dtd約束 --> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <typeAliases> <!-- 給pojo類起別名 --> <typeAlias type= "com.mybatis.pojo.Student" alias= "Student" /> </typeAliases> <!-- 配置數據庫環境其中development為默認的數據庫名稱事務管理器transactionManager類型為JDBC類型,數據源dataSource使用連接池的方式 --> <environments default = "development" > <environment id= "development" > <transactionManager type= "JDBC" ></transactionManager> <dataSource type= "POOLED" > <!-- 配置數據庫信息這里使用oracle數據庫 --> <property name= "driver" value= "oracle.jdbc.driver.OracleDriver" /> <property name= "url" value= "jdbc:oracle:thin:@127.0.0.1:1521:orcl" /> <property name= "username" value= "briup" /> <property name= "password" value= "briup" /> </dataSource> </environment> </environments> <!-- 配置xml文件映射路徑,在這里可以進行sql的操作 --> <mappers> <mapper resource= "com/mybatis/mappers/StudentMapper.xml" /> </mappers> </configuration> |
2)com.mybatis.mappers包下面的StudentMapper.xml:
首先,我們實現接口com.mybatis.mappers;包下面新建一個接口StudentMapper.Java,用來對應xml文件中的sql語句(映射),從而方便我們調用
1
2
3
4
5
6
7
8
|
package com.mybatis.mappers; import java.util.List; import com.mybatis.pojo.Student; public interface StudentMapper { List<Student> findAllStudents(); Student findStudentById(Integer id); void insertStudent(Student student); } |
使用同樣的方法,對mapper文件進行約束
然后進行xml代碼的編寫:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?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" > <!-- com.mybatis.mappers.StudentMapper是我們定義接口的全限定名字 這樣就可以使用接口調用映射的SQL語句了 這個名字一定要和接口對應上 --> <mapper namespace= "com.mybatis.mappers.StudentMapper" > <resultMap type= "Student" id= "StudentResult" > <id property= "studId" column= "stud_id" /> <result property= "name" column= "name" /> <result property= "email" column= "email" /> <result property= "dob" column= "dob" /> </resultMap> <select id= "findAllStudents" resultMap= "StudentResult" > SELECT * FROM STUDENTS </select> <!-- 列名和屬性名字不一致可以給查詢的列起一個別名 --> <select id= "findStudentById" parameterType= "int" resultType= "Student" > SELECT STUD_ID AS STUDID,NAME,EMAIL,DOB FROM STUDENTS WHERE STUD_ID=#{id} </select> <insert id= "insertStudent" parameterType= "Student" > INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(#{studId},#{name},#{email},#{dob}) </insert> </mapper> |
*******************************************************
注意:xml文件中寫的sql語句,最后面不要寫分號,否則會報錯誤,ORA-00911: 無效字符
*******************************************************
6 配置log4j.properties文件中的日志輸出:
位置src下面,文件名log4j.properties
內容:
1
2
3
4
5
6
7
8
9
10
|
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n #show sql log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG |
7 創建一個測試類StudentMapperTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.util.Date; 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.mybatis.mappers.StudentMapper; import com.mybatis.pojo.Student; public class StudentMapperTest { @Test public void test_insertStudent() { SqlSession session= null ; try { // 獲取配置文件 InputStream inputStream = Resources.getResourceAsStream( "mybatis-config.xml" ); // 生成工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 使用工廠對象生成sqlsession session = sqlSessionFactory.openSession(); // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); studentMapper.insertStudent(student); } catch (IOException e) { session.rollback(); e.printStackTrace(); } } } |
8 運行成功后會在控制臺中看到log4j日志輸出的這個程序運行的相關信息,如下:
在數據庫中查詢能夠看到如下信息
9 對mybatis的一些基本封裝
每次讀取配置文件,產生一個工廠對象SqlSessionFactory,然后再生成出SqlSession對象,這個過程雖然并不復雜,但是也都是一些重復的代碼流程,所以我們可以對其進行一個簡單的封裝:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package com.mybatis.utils; 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; public class MyBatisSqlSessionFactory { private static SqlSessionFactory sqlSessionFactory; public static SqlSessionFactory getSqlSessionFactory(){ if (sqlSessionFactory == null ){ InputStream inputStream = null ; try { inputStream = Resources.getResourceAsStream( "mybatis-config.xml" ); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } } return sqlSessionFactory; } public static SqlSession openSession() { return openSession( false ); //默認手動提交,故我們在調用的時候需要進行提交 } public static SqlSession openSession( boolean autoCommit) { return getSqlSessionFactory().openSession(autoCommit); } } |
之后每次使用的時候只需要調用該類中的靜態方法openSession即可
上面的代碼可簡寫為: //注意事務是自動提交還是手動提交
1
|
MyBatisSqlSessionFactory.openSession().getMapper(StudentMapper. class ).insertStudent(s); |
10 在上面的測試中,我們僅僅完成了增加的功能,下面我們進行實現刪除修改和查詢的功能:
在映射文件中進行如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?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" > <!-- com.mybatis.mappers.StudentMapper是我們定義接口的全限定名字 這樣就可以使用接口調用映射的SQL語句了 這個名字一定要和接口對應上 --> <mapper namespace= "com.mybatis.mappers.StudentMapper" > <resultMap type= "Student" id= "StudentResult" > <id property= "studId" column= "stud_id" /> <result property= "name" column= "name" /> <result property= "email" column= "email" /> <result property= "dob" column= "dob" /> </resultMap> <select id= "findAllStudents" resultMap= "StudentResult" > SELECT * FROM STUDENTS </select> <!-- 列名和屬性名字不一致可以給查詢的列起一個別名 --> <select id= "findStudentById" parameterType= "int" resultType= "Student" > SELECT STUD_ID AS STUDID,NAME,EMAIL,DOB FROM STUDENTS WHERE STUD_ID=#{id} </select> <insert id= "insertStudent" parameterType= "Student" > INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(#{studId},#{name},#{email},#{dob}) </insert> <delete id= "deleteStudentById" parameterType= "int" > delete from students where STUD_ID=#{id} </delete> <update id= "updateStudentById" parameterType= "Student" > update students set name=#{name},email=#{email} where stud_id=#{studId} </update> </mapper> |
在接口類中進行如下配置:
1
2
3
4
5
6
7
8
9
10
|
package com.mybatis.mappers; import java.util.List; import com.mybatis.pojo.Student; public interface StudentMapper { List<Student> findAllStudents(); Student findStudentById(Integer id); void insertStudent(Student student); void deleteStudentById(Integer id); void updateStudentById(Student student); } |
在測試文件中編寫如下代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package com.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; 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.mybatis.mappers.StudentMapper; import com.mybatis.pojo.Student; import com.mybatis.utils.MyBatisSqlSessionFactory; public class StudentMapperTest { @Test public void test_insertStudent() { SqlSession session= null ; try { // 獲取配置文件 InputStream inputStream = Resources.getResourceAsStream( "mybatis-config.xml" ); // 生成工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 使用工廠對象生成sqlsession session = sqlSessionFactory.openSession(); // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); studentMapper.insertStudent(student); session.commit(); System.out.println( "執行完畢" ); } catch (IOException e) { session.rollback(); e.printStackTrace(); } } @Test public void test_deleteStudentById() { SqlSession session= null ; session = MyBatisSqlSessionFactory.openSession(); //使用封裝之后的類 // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); studentMapper.deleteStudentById( 2 ); session.commit(); System.out.println( "執行完畢" ); } @Test public void test_updateStudentById() { SqlSession session= null ; session = MyBatisSqlSessionFactory.openSession(); //使用封裝之后的類 // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); Student student = new Student(); student.setStudId( 1 ); student.setName( "sususu" ); studentMapper.updateStudentById(student); session.commit(); System.out.println( "執行完畢" ); } @Test public void test_findStudentById() { SqlSession session= null ; session = MyBatisSqlSessionFactory.openSession(); //使用封裝之后的類 // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); Student student = studentMapper.findStudentById( 1 ); System.out.println(student); System.out.println( "執行完畢" ); } @Test public void test_findAllStudents() { SqlSession session= null ; session = MyBatisSqlSessionFactory.openSession(); //使用封裝之后的類 // 使用sqlsession獲得映射接口的實現類對象,接口的引用指向實現類的對象 StudentMapper studentMapper = session.getMapper(StudentMapper. class ); List<Student> list = studentMapper.findAllStudents(); System.out.println(list); System.out.println( "執行完畢" ); } } |
這樣我們就完成了對Student對象的增刪改查
以上所述是小編給大家介紹的Mybatis增刪改查實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/suwu150/article/details/52888392