版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/Mythology_px/article/details/82861314
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录
项目实例
1. 创建项目,引入Mybatis所需jar包(数据库包,mybatis包)
2. 创建数据库数据(MySQL)
## 创建数据库
CREATE DATABASE mybatis;
## 创建用户
CREATE USER 'mjsw'@'localhost'
IDENTIFIED BY 'mjsw';
COMMIT;
## 授权
GRANT ALL ON mybatis.* TO 'mjsw'@'localhost';
## 使用指定数据库
USE mybatis
## 创建表
CREATE TABLE stu(
stuno INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
sex VARCHAR(8),
bir DATE NOT NULL,
phone VARCHAR(11)
);
## 插入数据
INSERT INTO stu VALUES(NULL,'Micro','man','1997-02-12','17742328212');
INSERT INTO stu VALUES(NULL,'Myth','man','1997-03-20','18629364523');
INSERT INTO stu VALUES(NULL,'Gider','woman','1996-09-15','15629345522');
INSERT INTO stu VALUES(NULL,'Rose','woman','1996-04-11','15675342569');
## 查询数据库
SELECT * FROM stu;
3. 数据库驱动配置文件: MySQL.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mybatis
jdbc.user=mjsw
jdbc.password=mjsw
4. 添加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>
<!-- 引入外部配置properties文件(JDBC连接的信息) -->
<properties resource="MySQL.properties"/>
<!-- 为实体类定义别名:简化sql映射的xml引用 -->
<typeAliases>
<typeAlias type="com.model.Student" alias="Student"></typeAlias>
</typeAliases>
<!-- 配置mybatis运行环境:默认开发者模式 -->
<environments default="development">
<!-- 环境变量:开发者模式 -->
<environment id="development">
<!-- 事务管理器:type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC"/>
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<!-- 读取引入的外部配置文件中的数据:name属性值是固定的 -->
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 映射器:注册,映射接口配置文件 -->
<mappers>
<!-- 指定具体路径的映射接口配置文件资源 -->
<mapper resource="com/mapper/StudentMapper.xml"></mapper>
</mappers>
</configuration>
5. 创建model实体对象: Student
package com.model;
import java.sql.Date;
/*
* 数据库对象的实体对象
*/
public class Student {
private int stuno;
private String sname;
private String sex;
private Date bir;
private String phone;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int stuno, String sname, String sex, Date bir, String phone) {
super();
this.stuno = stuno;
this.sname = sname;
this.sex = sex;
this.bir = bir;
this.phone = phone;
}
@Override
public String toString() {
return "Student [stuno=" + stuno + ", sname=" + sname + ", sex=" + sex
+ ", bir=" + bir + ", phone=" + phone + "]";
}
public int getStuno() {
return stuno;
}
public void setStuno(int stuno) {
this.stuno = stuno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBir() {
return bir;
}
public void setBir(Date bir) {
this.bir = bir;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
6. 创建方法接口和定义操作表的sql映射配置文件并注册
接口: IstudentMapper
扫描二维码关注公众号,回复:
3442955 查看本文章
package com.mapper;
import java.util.List;
import com.model.Student;
/*
* 数据库方法接口----------->sql操作的映射文件
*/
public interface IStudentMapper {
// 查询所有学生信息
public List<Student> findAll();
// 增加信息
public int add(Student stu);
// 删除信息
public int delete(int id);
// 修改信息
public int update(Student stu);
}
映射配置文件: StudentMapper.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="com.mapper.IStudentMapper">
<!-- 接口对应的sql映射文件 :配置完接口映射文件之后需在mybatis配置文件进行注册-->
<!-- 执行查询,将结果集数据存入集合中,需自定义返回结果集 -->
<resultMap type="Student" id="StudentList">
<id property="stuno" column="stuno" />
<result property="sname" column="sname" />
<result property="sex" column="sex" />
<result property="bir" column="bir" />
<result property="phone" column="phone" />
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用 -->
<!-- parameterType属性指明查询时使用的参数类型 -->
<!-- resultType属性指明查询返回的结果值类型 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<!-- 增,删,改返回是影响的行数,不需要指定返回类型resultType-->
<!-- 增加信息 -->
<insert id="add" parameterType="Student">
insert into stu values(null,#{sname},#{sex},#{bir},#{phone})
</insert>
<!-- 删除信息 -->
<delete id="delete" parameterType="Student">
delete from stu where stuno=#{stuno}
</delete>
<!-- 修改信息 -->
<update id="update" parameterType="Student">
update stu set sname=#{sname},sex=#{sex},bir=#{bir},phone=#{phone} where stuno=#{stuno}
</update>
<!-- 查询所有信息 -->
<select id="findAll" resultMap="StudentList">
select * from stu
</select>
</mapper>
7. 工具类: DBTools
package com.util;
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;
/*
* mybatis连接数据库工具类
*/
public class DBTools {
private SqlSession sqlsession = null ;
// 连接数据库,并返回接口
public Object getInterfaceSqlSession(Class<?> cls) throws IOException{
// ① 引入配置文件,创建SqlSessionFactoryBuilder
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// ② builder建造SqlSessionFactory
SqlSessionFactory factory = builder.build(is);
// ③ factory得到SqlSession
this.sqlsession = factory.openSession();
// ④ 获取接口对象,
Object obj = sqlsession.getMapper(cls);
return obj;
}
// 提交事务
public void commit(){
if(sqlsession!=null){
sqlsession.commit();
}
}
// 关闭
public void close(){
if(sqlsession!=null){
sqlsession.close();
}
}
}
8. 测试
package com.test;
import java.io.IOException;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mapper.IStudentMapper;
import com.model.Student;
import com.util.DBTools;
/*
* 测试
* */
public class Test {
public static void main(String[] args) throws IOException {
// 创建数据库对象
DBTools db = new DBTools();
// 获取接口
IStudentMapper ism =(IStudentMapper)db.getInterfaceSqlSession(IStudentMapper.class);
// 查询
List<Student> list = ism.findAll();
for (Student stu : list) {
System.out.println(stu);
}
// 增加
try {
ism.add(new Student(0,"Lisa", "woman",
new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1996-12-30").getTime())
, "17792364586"));
} catch (ParseException e) {
System.err.println("时间格式转换失败");
}
System.out.println("数据库数据增加成功");
//修改
try {
ism.update(new Student(4,"Rose", "woman",
new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1996-04-11").getTime())
, "12345678923"));
} catch (ParseException e) {
System.err.println("时间格式转换失败");
}
System.out.println("数据库数据修改成功");
// 删除
ism.delete(1);
System.out.println("数据库数据删除成功");
// 提交事务和关闭
db.commit();
db.close();
}
}