MyBatis实例——学生成绩管理"Maven重构"
0、Maven简单介绍
Maven
是一个自动化构建工具,其主要的作用之一是帮助开发人员管理jar
包。接下来通过图文教程演示maven
的使用。
Maven—菜鸟教程
1、Maven是项目对象模型(POM),是一个自动化构建工具。一个项目的构建过程如下编译、测试、打包、部署、安装。而且这个构建过程是自动化的。
2、Maven主要的作用管理jar包
3、Jar包可以到中央工厂去下载
0.1、搭建maven开发环境
Eclipse
开发工具中已经内置了maven
插件。在Eclipse
中找到maven
插件的方法如下:
0.2、Maven仓库中的jar包从哪里来
在maven
项目中,开发人员导入jar
包时,会自动从maven
的仓库中获取jar包,如果maven仓库中没有所需要的jar包,那么maven就会自动到网上下载jar包,然后将下载的jar放到仓库中,再提供给我们的项目。
使用maven重构“学生成绩管理”(eduSystem)项目.
执行步骤:
1、准备工作:
(1)、创建数据库;
2、搭建开发环境:
(1)、创建maven项目;
(2)、导入jar包(向pow.xml文件中添加jar包);
3、业务开发:
(1)、添加配置文件(在src/main/resource中添加);
(2)、添加实体类(在src/main/java创建包,在包中创建实体类);
(3)、添加映射文件(在 src/main/resource中添加);
4、测试
(1)、创建测试类(在src/main/test创建测试包,在包中创建测试类)。
一、准备工作
创建数据库
① 使用mysql数据库;
② 创建数据库edusystem;
③ 创建数据表score;
④ 初始化数据
#创建数据库
CREATE DATABASE edusystem;
#使用该数据库
USE edusystem;
#创建数据库表
CREATE TABLE score (
id INT AUTO_INCREMENT PRIMARY KEY,
stuno VARCHAR (5),
score INT
);
#向数据库表中插入数据
INSERT INTO score (stuno, score)
VALUES
('12301', 65);
INSERT INTO score (stuno, score)
VALUES
('12302', 75);
#查看数据库中的数据
SELECT
*
FROM
score
二、搭建开发环境
2.1、创建Maven项目
项目创建完成。
2.2、导入jar包
Maven项目
中是通过GAV
来描述项目对jar
的依赖的
GroupId: 公司
artifactId:项目
Version: 版本
提供GAV
的网站有很多,最重要的是Maven中央工厂。
导入MyBatis包
至此,MyBatis包就算是导入完成,按照如上操作接下来将MySql和JUnit包导入。
MySql
JUnit
三个jar包都导入到pom.xml文件中如下图所示:
三、业务开发
3.1、添加配置文件
MyBatis
配置文件在maven项目
中需要放到resources
目录下
MyBatis配置文件
的内容是MyBatis官网中“入门”一栏中获取。
sqlconfig.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.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/edusystem?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/Score.xml"/>
</mappers>
</configuration>
3.2、添加实体类
在maven
项目中,java类放在src/main/java
目录下
Score.java
package cn.edu.model;
public class Score {
private int id;
private String stuno;
private int score;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuno() {
return stuno;
}
public void setStuno(String stuno) {
this.stuno = stuno;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
导入get
和set
方法的快捷键:Shift + Alt + S
3.3、添加映射文件
在src/main/resources/
创建专门用于管理映射文件的目录,命名为mapper
,在mapper
目录下创建映射文件Score.xml
。
注意:映射文件的名称要与所对应实体类的名称要一致。
映射文件
的内容是MyBatis官网中“入门”一栏中获取。
Score.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">
<mapper namespace="score">
<!--查找语句-->
<select id="selectByOne" parameterType="string" resultType="cn.edu.model.Score">
select * from score where stuno = #{stuno}
</select>
<!--插入语句
insert语句中的parameterType属性是需要插入值的提供对象,这个不需要传数据的类型-->
<insert id="insert" parameterType="cn.edu.model.Score">
INSERT INTO score(stuno,score)VALUES (#{stuno},#{score})
</insert>
<!--删除语句-->
<delete id="delete" parameterType="string">
DELETE FROM score WHERE stuno=#{stuno};
</delete>
<!--更新语句-->
<update id="update" parameterType="cn.edu.model.Score">
UPDATE score SET score = #{score} WHERE stuno = #{stuno}
</update>
</mapper>
注意:映射文件最终要在配置文件中配置。
四、单元测试
在src/test/java
中创建包cn.edu.test
,在改包中创建测试类Tests
,如下:
Tests.java
package cn.edu.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 cn.edu.model.Score;
public class Tests {
public static void main(String[] args) throws IOException {
String file = "sqlconfig.xml";
InputStream stream = Resources.getResourceAsStream(file);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
Score score = session.selectOne("score.selectByOne", "12301");
System.out.println("学号:"+score.getStuno()+"\n成绩:"+score.getScore());
}
// 使用junit完成单元测试(推荐使用)
@Test
public void findByNo() throws IOException {
String file = "sqlconfig.xml";
InputStream stream = Resources.getResourceAsStream(file);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
Score score = session.selectOne("score.selectByOne", "66666");
System.out.println("学生的学号:"+score.getStuno() + "\n学生的成绩:" + score.getScore());
}
//插入测试
@Test
public void testInster() throws IOException {
String file = "sqlconfig.xml";
InputStream stream = Resources.getResourceAsStream(file);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
// 添加成绩
Score score = new Score();
score.setStuno("77777");
score.setScore(80);
// mybatis在执行insert,update,delete操作时,会自动开启事务
session.insert("score.insert", score);
// mybatis没有自动提交事务
session.commit(); // 提交事务,此时表示所有的SQL语句都成功执行了
// session.rollback();//事务回滚,此时表示所有的sql语句都恢复到执行前的状态
session.close();
System.out.println("插入成功!");
}
//删除测试
@Test
public void testDelete() throws IOException {
String file = "sqlconfig.xml";
InputStream stream = Resources.getResourceAsStream(file);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
//删除成绩
Score score = new Score();
score.setStuno("77777");
session.delete("score.delete", score);
session.commit();
System.out.println("删除成功!");
}
//更新测试
@Test
public void testUpdate() throws IOException {
String file = "sqlconfig.xml";
InputStream stream = Resources.getResourceAsStream(file);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
//更新成绩
Score score = new Score();
score.setStuno("66666");
score.setScore(98);
// mybatis在执行insert,update,delete操作时,会自动开启事务
session.update("score.update", score);
// mybatis没有自动提交事务
session.commit(); // 提交事务,此时表示所有的SQL语句都成功执行了
// session.rollback();//事务回滚,此时表示所有的sql语句都恢复到执行前的状态
session.close();
System.out.println("更新成功!");
}
}
注意:测试类的名称最好不要设置为Test
,因为这样在进行JUnit
测试(@Test
)时会产生冲突。