一.项目总体结构
二.用到jar包:
mybatis-3.4.1.jar
ojdbc14-10.2.0.3.0.jar
JUnit4
三.配置文件
1.test.properties
1 jdbc.utf-8.driver = oracle.jdbc.driver.OracleDriver
2 jdbc.utf-8.jdbcUrl = jdbc:oracle:thin:@xx.0.0.xxx:1521:orcl
3 jdbc.utf-8.username = txxx
4 jdbc.utf-8.password = txxx
2.mybatis.xml
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6 <environments default="development">
7 <!-- 可以配置多个环境指向不同数据库,每个数据库可分别用一个SqlSessionFactory创建实例 -->
8 <environment id="development">
9 <!-- 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围
10 <transactionManager type="JDBC" /> -->
11 <!-- 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
12 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为 -->
13 <transactionManager type="MANAGED">
14 <property name="closeConnection" value="false" />
15 </transactionManager>
16 <dataSource type="POOLED">
17 <property name="driver" value="${jdbc.utf-8.driver}" />
18 <property name="url" value="${jdbc.utf-8.jdbcUrl}" />
19 <property name="username" value="${jdbc.utf-8.username}" />
20 <property name="password" value="${jdbc.utf-8.password}" />
21 </dataSource>
22 </environment>
23 </environments>
24 <mappers>
25 <mapper resource="mappers/StuMapper.xml" />
26 </mappers>
27 </configuration>
3.StuMapper.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">
<!-- 如果自己写mapperDao的实现类,命名空间最好与实体对应 -->
<!-- <mapper namespace="entity.StuScore"> -->
<!-- 如果使用mybatis来自动生成mapper接口的实现类,命名空间应该与mapper接口对应 -->
<mapper namespace="dao.StuScoreDao">
<!-- 实体映射 -->
<resultMap type="entity.StuScore" id="StuMap">
<result property="name" column="NAME"/>
<result property="subject" column="SUBJECT"/>
<result property="score" column="SCORE"/>
<result property="stuid" column="STUID"/>
</resultMap>
<!--根据学号查询学生 -->
<select id="selectByStuid" resultMap="StuMap">
SELECT * FROM stuscore WHERE STUID = #{stuid}
</select>
<!-- 增加数据 -->
<insert id="add" parameterType="entity.StuScore">
INSERT INTO stuscore(
NAME,
SUBJECT,
SCORE,
STUID
)VALUES(
#{name},
<!-- 对于允许为空的列要加上jdbcType -->
#{subject,jdbcType=VARCHAR},
#{score,jdbcType=NUMERIC},
#{stuid}
)
</insert>
<!-- 删除数据 -->
<delete id="delete" parameterType="int">
DELETE FROM stuscore
WHERE STUID = #{stuid}
</delete>
<!-- 更新数据 -->
<update id="update" parameterType="entity.StuScore">
UPDATE stuscore
<set>
<if test="name != null">NAME = #{name},</if>
<if test="subject != null">SUBJECT = #{subject},</if>
<if test="score != null">SCORE = #{score}</if>
</set>
WHERE STUID = #{stuid}
</update>
</mapper>
四.java代码部分
1.实体类
1 package entity;
2
3 public class StuScore {
4 //姓名
5 private String name;
6 //学科
7 private String subject;
8 //成绩
9 private Integer Score;
10 //学号
11 private Integer stuid;
12 public StuScore() {
13 super();
14 }
15 public StuScore(String name, String subject, Integer score, Integer stuid) {
16 super();
17 this.name = name;
18 this.subject = subject;
19 Score = score;
20 this.stuid = stuid;
21 }
22 public String getName() {
23 return name;
24 }
25 public void setName(String name) {
26 this.name = name;
27 }
28 public String getSbuject() {
29 return subject;
30 }
31 public void setSbuject(String sbuject) {
32 this.subject = sbuject;
33 }
34 public Integer getScore() {
35 return Score;
36 }
37 public void setScore(Integer score) {
38 Score = score;
39 }
40 public Integer getStuid() {
41 return stuid;
42 }
43 public void setStuid(Integer stuid) {
44 this.stuid = stuid;
45 }
46 }
2.StuScoreDao
1 package dao;
2
3 import entity.StuScore;
4
5 public interface StuScoreDao {
6 /**
7 * 根据学号查询学生
8 * @param stuid
9 * @return
10 */
11 public StuScore selectByStuid(Integer stuid);
12
13 /**
14 * 增加学生
15 * @param stu
16 */
17 public void insertStu(StuScore stu);
18
19 /**
20 * 根据stuid删除学生
21 * @param stu
22 */
23 public void deleteStu(Integer stuid);
24
25 /**
26 * 更新学生数据
27 * @param stu
28 */
29 public void updateStu(StuScore stu);
30 }
3.不需要写StuScoreDao实现类的测试方法
1 package test;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.Properties;
6
7 import org.apache.ibatis.io.Resources;
8 import org.apache.ibatis.session.SqlSession;
9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.After;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import dao.StuScoreDao;
16 import entity.StuScore;
17
18 public class TestMyBatisMapperDao {
19 private StuScoreDao mapper;
20
21 @Before
22 public void setUp() throws Exception {
23 InputStream fis = null;
24 InputStream inputStream = null;
25 try {
26 //创建Properties对象
27 Properties prop = new Properties();
28 //创建输入流,指向配置文件,getResourceAsStream可以从classpath加载资源
29 fis= Resources.getResourceAsStream("test.properties");
30 //加载属性文件
31 prop.load(fis);
32 inputStream = Resources.getResourceAsStream("mybatis.xml");
33 //build的第二个参数对应mybatis.xml配置文件的<environment id="development">标签的id,
34 //其中后面两个参数可选,若第二个参数不写则默认为"development"
35 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"development",prop);
36 SqlSession sqlSession = sqlSessionFactory.openSession();
37 //StuScoreDao.class与配置文件StuMapper的namespace对应
38 mapper = sqlSession.getMapper(StuScoreDao.class);
39 } catch (IOException e) {
40 // TODO Auto-generated catch block
41 e.printStackTrace();
42 }finally{
43 if(fis != null){
44 try {
45 fis.close();
46 } catch (IOException e) {
47 // TODO Auto-generated catch block
48 e.printStackTrace();
49 }
50 }
51 if(inputStream != null){
52 try {
53 inputStream.close();
54 } catch (IOException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58 }
59 }
60 }
61
62 @After
63 public void tearDown() throws Exception {
64 }
65
66 @Test
67 //根据学号查询学生
68 public void test1() {
69 StuScore stuScores = this.mapper.selectByStuid(2);
70 System.out.println(stuScores.getName());
71 }
72
73 @Test
74 //增加学生
75 public void test2(){
76 StuScore stuScore = new StuScore();
77 stuScore.setName("测试");
78 stuScore.setStuid(9);
79 this.mapper.insertStu(stuScore);
80 }
81
82 @Test
83 //删除
84 public void test3(){
85 this.mapper.deleteStu(9);
86 }
87
88 @Test
89 //修改数据
90 public void test4(){
91 StuScore stu = new StuScore();
92 stu.setName("测试1");
93 stu.setStuid(9);
94 this.mapper.updateStu(stu);
95 }
96 }
4.实现类
1 package dao.Impl;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.Properties;
6
7 import org.apache.ibatis.io.Resources;
8 import org.apache.ibatis.session.SqlSession;
9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10
11 import dao.StuScoreDao;
12 import entity.StuScore;
13
14 public class StuScoreImpl implements StuScoreDao {
15 private static SqlSession sqlSession;
16 //如果有多个mapper文件,为防止混淆,可以使用NAMESPACE来取指定mapper文件中的sql,第一个方法selectByStuid()示例了用法
17 private static final String NAMESPACE = StuScore.class.getName();//即 entity.StuScore
18 static{
19 InputStream fis = null;
20 InputStream inputStream = null;
21 try {
22 //创建Properties对象
23 Properties prop = new Properties();
24 //创建输入流,指向配置文件,getResourceAsStream可以从classpath加载资源
25 fis= Resources.getResourceAsStream("test.properties");
26 //加载属性文件
27 prop.load(fis);
28 inputStream = Resources.getResourceAsStream("mybatis.xml");
29 //build的第二个参数对应mybatis.xml配置文件的<environment id="development">标签的id,
30 //其中后面两个参数可选,若第二个参数不写则默认为"development"
31 sqlSession = new SqlSessionFactoryBuilder().build(inputStream,"development",prop).openSession();
32 } catch (IOException e) {
33 // TODO Auto-generated catch block
34 e.printStackTrace();
35 }finally{
36 if(fis != null){
37 try {
38 fis.close();
39 } catch (IOException e) {
40 // TODO Auto-generated catch block
41 e.printStackTrace();
42 }
43 }
44 if(inputStream != null){
45 try {
46 inputStream.close();
47 } catch (IOException e) {
48 // TODO Auto-generated catch block
49 e.printStackTrace();
50 }
51 }
52 }
53 }
54
55 /**
56 * 根据学号查询学生
57 * @param stuid
58 * @return
59 */
60 @Override
61 public StuScore selectByStuid(Integer stuid) {
62 // TODO Auto-generated method stub
63 //示例使用NAMESAPCE的用法
64 return sqlSession.selectOne(NAMESPACE+".selectByStuid",stuid);
65 }
66
67 /**
68 * 增加学生
69 * @param stu
70 */
71 @Override
72 public void insertStu(StuScore stu) {
73 // TODO Auto-generated method stub
74 sqlSession.insert("add",stu);
75 }
76
77 /**
78 * 根据stuid删除学生
79 * @param stu
80 */
81 @Override
82 public void deleteStu(Integer stuid) {
83 // TODO Auto-generated method stub
84 sqlSession.delete("delete",stuid);
85 }
86
87 /**
88 * 更新学生数据
89 * @param stu
90 */
91 @Override
92 public void updateStu(StuScore stu) {
93 // TODO Auto-generated method stub
94 sqlSession.update("update", stu);
95 }
96
97 }
5.自己写实现类的测试方法
1 package test;
2
3 import org.junit.After;
4 import org.junit.Before;
5 import org.junit.Test;
6
7 import dao.StuScoreDao;
8 import dao.Impl.StuScoreImpl;
9 import entity.StuScore;
10
11 public class TestMybatis {
12
13 private StuScoreDao stuScoreDao;
14
15 @Before
16 public void setUp() throws Exception {
17 this.stuScoreDao = new StuScoreImpl();
18 }
19
20 @After
21 public void tearDown() throws Exception {
22 }
23
24 @Test
25 //根据学号查询学生
26 public void test1() {
27 StuScore stuScores = this.stuScoreDao.selectByStuid(2);
28 System.out.println(stuScores.getName());
29 }
30
31 @Test
32 //增加学生
33 public void test2(){
34 StuScore stuScore = new StuScore();
35 stuScore.setName("测试");
36 stuScore.setStuid(9);
37 this.stuScoreDao.insertStu(stuScore);
38 }
39
40 @Test
41 //删除
42 public void test3(){
43 this.stuScoreDao.deleteStu(9);
44 }
45
46 @Test
47 //修改数据
48 public void test4(){
49 StuScore stu = new StuScore();
50 stu.setName("测试1");
51 stu.setStuid(9);
52 this.stuScoreDao.updateStu(stu);
53 }
54 }