1.创建项目
(1)创建maven项目
*记得勾上这个
上面是分组ID,是maven项目包的唯一标识,类似包名
下面的ID是项目名称,随意取即可
(2)创建动态web项目
推荐选择3.1而不是4.0,为了保障服务器稳定性
设置好项目名一直next即可
2.导入mysql驱动和mybatis的jar包
(1)利用maven配置,配置pom.xml文件
这里是用来配置导入所需jar包的,是管理maven项目的核心配置文件
*里一定要写入正确的版本号,否则会报错
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cs.ahau.cn</groupId>
<artifactId>MybatisTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- 数据库连接部分,以mysql为例-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- Mybatis部分-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
</project>
(2)动态web项目常规导入jar包
在WEB-INF的lib文件夹下导入所有所需jar包
还需在项目中重构导入jar包,不然调用报错
3.配置log4j.properties文件
为了方便查看控制台输出SQL语句
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.lifeng=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
web项目在src下创建包,如cs.su.cn
maven项目在src/main/java下新建包
4.创建Student实体类
直接在包内新建实体类
*get、set与toString方法可通过右键代码区选择源码(source)选择一键生成
package cs.ahau.edu.cn;
public class Student {
private String StuNo;
private String StuName;
private String StuPassword;
public Student(String sno, String sname, String spwd) {
this.StuNo = sno;
this.StuName = sname;
this.StuPassword = spwd;
}
public String getStuNo() {
return StuNo;
}
public void setStuNo(String stuNo) {
StuNo = stuNo;
}
public String getStuName() {
return StuName;
}
public void setStuName(String stuName) {
StuName = stuName;
}
public String getStuPassword() {
return StuPassword;
}
public void setStuPassword(String stuPassword) {
StuPassword = stuPassword;
}
@Override
public String toString() {
return "Student [StuNo=" + StuNo + ", StuName=" + StuName + ", StuPassword=" + StuPassword + "]";
}
}
5.创建对象映射Dao层接口
在包内新建StudentDao类
仅定义抽象方法,等待被实现
package cs.ahau.edu.cn;
import java.util.List;
public interface StudentDao {
public List<Student> selectAllStudent();
public int insertStudent(Student student);
public int updateStudent(Student student);
public int deleteStudent(String sno);
}
6.创建SQL映射文件
在包内新建StudentMapper.xml映射文件
*每个sql语句需要单独区分开,id要与Dao接口的函数名一致,parameterType与resultType分别对应参数类型和sql语句执行返回类型,路径包名等需要写完整
<?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="cs.ahau.edu.cn.StudentDao">
<!-- 查找所有学生 -->
<select id="selectAllStudent" resultType="cs.ahau.edu.cn.Student"> <!-- parameterType="java.lang.String" -->
select * from stu
</select>
<!-- 插入一个学生 -->
<insert id="insertStudent" parameterType="cs.ahau.edu.cn.Student">
insert into stu(StuNo, StuName, StuPassword) values (#{StuNo}, #{StuName}, #{StuPassword})
</insert>
<!-- 修改一个学生 -->
<update id="updateStudent" parameterType="cs.ahau.edu.cn.Student">
update stu set StuPassword = #{StuPassword} where StuNo = #{StuNo}
</update>
<!-- 删除一个学生 -->
<delete id="deleteStudent" parameterType="java.lang.String">
delete from stu where sno = #{0}
</delete>
</mapper>
7.创建MyBatis主配置文件:mybatis-config.xml
web项目:在src主目录下创建
maven项目:在src/main/resources下创建
用于配置mysql connector连接信息和sql映射文件的Mapper路径
*结构需要按代码所示逐级嵌套书写,configuration下紧接着写好jdbc.properties的路径,否则下面的property处引用变量会出问题
<?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>
<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="cs/ahau/edu/cn/StudentMapper.xml"/>
</mappers>
</configuration>
这里是单独的jdbc.properties文件,用来独立存放jdbc驱动连接信息
*如果mysql服务器版本在8.0以上,driver需要写成com.mysql.cj.jdbc.Driver
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/student?useSSL=false&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
jdbc.username = root
jdbc.password = 123456
8.创建Dao层实现类
在包内新建StudentDaoImpl类
用于实现Dao接口,真正调用mybatis配置文件接入数据库,生成session对象,执行sql语句操作等方法。
包括基本增查改删
*除了查询,所以有关修改数据库信息的操作均需进行提交操作,即在末尾写入session.commit语句,表示提交会话
package cs.ahau.edu.cn;
import java.io.Reader;
import java.util.ArrayList;
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;
public class StudentDaoImpl implements StudentDao{
SqlSession session = null;
public List<Student> selectAllStudent() {
List<Student> list = new ArrayList<Student>();
try {
//1.读取主配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
//2.根据主配置文件mybatis-config.xml构建SqlSessionFactory对象factory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
//3.根据SqlSessionFactory对象创建SqlSession对象session
session = factory.openSession();
//4.调用SqlSession对象session的selectList方法执行查询数据库的操作,返回映射后的结果集合
list = session.selectList("cs.ahau.edu.cn.StudentDao.selectAllStudent");
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(list);
return list;
}
public int insertStudent(Student student) {
int rs = 0;
try {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
session = factory.openSession();
rs = session.insert("cs.ahau.edu.cn.StudentDao.insertStudent", student);
session.commit();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public int updateStudent(Student student) {
int rs = 0;
try {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
session = factory.openSession();
rs = session.update("cs.ahau.edu.cn.StudentDao.updateStudent", student);
session.commit();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public int deleteStudent(String sno) {
int rs = 0;
try {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
session = factory.openSession();
rs = session.delete("cs.ahau.edu.cn.StudentDao.deleteStudent", sno);
session.commit();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
}
9.创建主测试类,实例化接口类
将每个sql执行方法分开写成函数,主函数需要测试哪个函数就调用哪个
package cs.ahau.edu.cn;
import java.util.List;
public class MainTest {
static StudentDao studentdao = new StudentDaoImpl();
public static void main(String[] args) {
//selectAllStudent();
Student std = new Student("1000", "xiao", "123");
insertStudent(std);
}
public static void selectAllStudent() {
List<Student> list = studentdao.selectAllStudent();
for (int i = 0; i < list.size(); i++) {
list.get(i).toString();
}
}
public static void insertStudent(Student student) {
int rs = studentdao.insertStudent(student);
System.out.println(rs);
}
public static void updateStudent(Student student) {
int rs = studentdao.updateStudent(student);
System.out.println(rs);
}
public static void deleteStudent(String sno) {
int rs = studentdao.deleteStudent(sno);
System.out.println(rs);
}
}
测试结果如下: