1. MyBatis简介
MyBatis的帮助文档:https://mybatis.org/mybatis-3/zh/index.html
MyBatis体系结构
MyBatis工作原理
2.MyBatis是什么?
MyBatis是一个基于ORM的数据访问层框架。
3.什么是框架?
框架是对JavaSE和JavaWEB中的技术进行各种的封装,可以帮助开发者提高开发的效率,同时也能提升项目的性能。
框架本质还是Java程序,这些程序将特别原始和底层的代码进行了封装,然后把这些封装以后的程序打包之后提供给开发人员使用。帮助开发者提高开发的效率,同时也能提升项目的性能。
数据访问层--通常我们在做项目的时候,会把一个项目分成3个部分,这3个部分分别是:
1.控制层[web层]----用来做数据的导航【Servlet、Struts2、SpringMVC】
2.业务层----用来处理相关功能的具有实现业务。【Spring】
3.数据访问层[数据持久层]---用来访问数据库数据。【JDBC、Hibernate、MyBatis】
早期javaweb的3大框架---SSH[Struts2-Spring-Hibernate]
现在流行的javaweb的3大框架---SSM[SpringMVC-Spring-MyBatis]
3.ORM是什么?
ORM---对象关系映射
我们在访问数据库的时候所编写的都是Java程序,Java程序只认识Java对象,而我们所访问的数据库大多数都是关系型数据库,那么这时Java程序要想访问关系型数据库,那么就需要将Java对象转换成关系型数据,才能被数据库认识。
这时我们可以认为一个Java类就是关系型数据库中的一张数据表,Java类中的成员变量是数据库表中的一个列,Java类创建的Java对象就是数据库表中的一行记录。这时将Java对象对应成为数据库表记录的过程就是对象关系映射【ORM】。
4.使用MyBatis的优点?
1.简化数据库访问操作,提高开发的效率,提升项目的性能,增加程序的可维护性
2.当我们使用Java程序控制Java对象的时候,数据库中的数据表记录会随之变化。【将原来通过java程序访问数据库表的操作,简化成通过java程序访问java对象】
5.使用MyBatis框架步骤
第一个MyBatis程序
第一步:准备数据库表
create table t_person(
per_id int primary key auto_increment,
per_name varchar(20),
per_age int,
per_address varchar(30)
);
第二步:创建maven工程
参考:
https://blog.csdn.net/weixin_52192654/article/details/114183422
第三步:添加jar依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
第四步:参考数据库表,创建javaBean类
package com.wangxing.mybatistest.bean;
/**
*
* @author 14336
*
*/
public class Person {
private int perid;
private String pername;
private int perage;
private String peraddress;
public int getPerid() {
return perid;
}
public void setPerid(int perid) {
this.perid = perid;
}
public String getPername() {
return pername;
}
public void setPername(String pername) {
this.pername = pername;
}
public int getPerage() {
return perage;
}
public void setPerage(int perage) {
this.perage = perage;
}
public String getPeraddress() {
return peraddress;
}
public void setPeraddress(String peraddress) {
this.peraddress = peraddress;
}
}
第五步:在src/main/resources编写数据库链接字符串的配置文件【mydate.properties】
mydrivername=com.mysql.jdbc.Driver
myurl=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
myusername=root
mypassword=123456
第六步:创建数据库访问接口
package com.wangxing.mybatistest.mapper;
import java.util.List;
import com.wangxing.mybatistest.bean.Person;
/**
* 数据库访问接口
* @author 14336
*
*/
public interface PersonMapper {
/**
* 添加数据
* @param person
* @return
*/
boolean insertPerson(Person person );
/**
*修改数据
* @param person
* @return
*/
boolean updatePerson(Person person);
/**
* 删除数据
* @param perid
* @return
*/
boolean deletePersonById(int perid);
/**
* 根据id查询数据
* @param perid
* @return
*/
Person selectPersonById(int perid);
/**
* 查询所有数据
* @return
*/
List<Person> selectPerson();
}
第七步:在src/main/resources编写sql映射文件[PersonMapper.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.wangxing.mybatistest.mapper.PersonMapper">
<insert id="insertPerson" parameterType="com.wangxing.mybatistest.bean.Person">
insert into t_person values(null,#{pername},#{perage},#{peraddress});
</insert>
<update id="updatePerson" parameterType="com.wangxing.mybatistest.bean.Person">
update t_person set per_name=#{pername},per_age=#{perage},per_address=#{peraddress} where per_id=#{perid};
</update>
<delete id="deletePersonById" parameterType="java.lang.Integer">
delete from t_person where per_id=#{perid};
</delete>
<resultMap type="com.wangxing.mybatistest.bean.Person" id="personMap">
<id column="per_id" property="perid"/>
<result column="per_name" property="pername"/>
<result column="per_age" property="perage"/>
<result column="per_address" property="peraddress"/>
</resultMap>
<select id="selectPersonById" parameterType="java.lang.Integer" resultMap="personMap">
select * from t_person where per_id=#{perid};
</select>
<select id="selectPerson" resultMap="personMap">
select * from t_person;
</select>
</mapper>
第八步:在src/main/resources编写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 resource="mydata.properties"></properties>
<!-- 配置mybatis默认的连接数据库的环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${mydrivername}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
<!-- 配置MyBatis数据访问接口的SQL映射文件路径 -->
<mappers>
<mapper resource="PersonMapper.xml"></mapper>
</mappers>
</configuration>
第九步:创建测试类
package com.wangxing.mybatistest.test;
import java.io.IOException;
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 com.wangxing.mybatistest.bean.Person;
import com.wangxing.mybatistest.mapper.PersonMapper;
/**
* 用 Mapper【getMapper】 接口执行 SQLL
* @author 14336
*
*/
public class TestMain {
/**
*测试添加
*/
public static void testInsert(){
SqlSession sqlSession = null;
//ͨ通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//ͨ
sqlSession=sqlSessionFactory.openSession();
//得到数据访问接口对象
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
//创建person对象
Person person = new Person();
person.setPername("zhangsan2");
person.setPerage(23);
person.setPeraddress("西安");
//
boolean flag = personMapper.insertPerson(person);
if (flag) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
//
sqlSession.commit();
} catch (IOException e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
/**
* 测试修改
*/
public static void testUpdate(){
SqlSession sqlSession =null;
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
sqlSession = sqlSessionFactory.openSession();
//得到数据访问接口对象
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
Person person= new Person();
person.setPerid(1);
person.setPername("zhangsanfeng");
person.setPerage(123);
person.setPeraddress("武当");
boolean flag = personMapper.updatePerson(person);
if (flag) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
//提交sqlsession
sqlSession.commit();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
sqlSession.close();
}
}
/**
* 测试根据ID查询
* @param args
*/
public static void testSelectById(int stuid){
SqlSession sqlsession =null;
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
sqlsession = sqlSessionFactory.openSession();
//得到数据访问接口对象
PersonMapper personMapper = sqlsession.getMapper(PersonMapper.class);
Person person = personMapper.selectPersonById(stuid);
if (person!=null) {
System.out.println(person.getPerid()+","+person.getPername());
}
//提交sqlsession
sqlsession.commit();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
sqlsession.close();
}
}
/**
* 测试查询所有
* @param args
*/
public static void testSelect(){
SqlSession sqlSession = null;
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
sqlSession = sqlSessionFactory.openSession();
//得到数据库访问接口对象
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
List<Person> personlist = personMapper.selectPerson();
if (personlist.size()!=0) {
for (Person person : personlist) {
System.out.println(person.getPerid()+","+person.getPername());
}
}
//提交sqlsession
sqlSession.commit();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
sqlSession.close();
}
}
/**
* 测试根据id删除
* @param args
*/
public static void testDelete(int id){
SqlSession sqlSession =null;
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
sqlSession = sqlSessionFactory.openSession();
//得到数据访问接口对象
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
boolean flag = personMapper.deletePersonById(id);
if (flag) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
//提交sqlSession
sqlSession.commit();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void main(String[] args) {
// testInsert();
// testUpdate();
// testSelectById(2);
testSelect();
// testDelete(1);
}
}