1.什么是MyBatis?
MyBatis是一个基于ORM的数据访问层框架。
框架----在学习JavaSE和JavaWEB的过程中,学的都是基础和底层的技术,使用这些技术完全可以开发出web应用。但是使用这些技术开发的效率非常低下,并且会出现很多繁琐的步骤,同时也不利于后期的代码维护和升级。于是就有一些牛逼的人物,他们针对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]
2.什么是ORM?
ORM—对象关系映射
我们在访问数据库的时候所编写的都是Java程序,Java程序只认识Java对象,而我们所访问的数据库大多数都是关系型数据库,那么这时Java程序要想访问关系型数据库,那么就需要将Java对象转换成关系型数据,才能被数据库认识。
这时我们可以认为一个Java类就是关系型数据库中的一张数据表,Java类中的成员变量是数据库表中的一个列,Java类创建的Java对象就是数据库表中的一行记录。这时将Java对象对应成为数据库表记录的过程就是对象关系映射【ORM】。
3.为什么要使用MyBatis?
3.为什么要使用MyBatis?
1.为了简化数据库访问操作,提高开发的效率,提升项目的性能,增加程序的可维护性
2.当我们使用Java程序控制Java对象的时候,数据库中的数据表记录会随之变化。【将原来通过java程序访问数据库表的操作,简化成通过java程序访问java对象】
使用MyBatis框架
1.准备数据库表
create table t_person(
per_id int primary key auto_increment,
per_name varchar(20),
per_age int,
per_address varchar(30)
);
2创建maven工程
3.添加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>
4.参考数据库表,创建javaBean类
package com.wangxing.mybatis.bean;
public class Person {
private int perid;
private String pername;
private int perage;
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;
}
private String peraddress;
}
5.在src/main/resources编写数据库链接字符串的配置文件【mydate.properties】
mydriver=com.mysql.jdbc.Driver
myurl = jdbc:mysql://127.0.0.1:3306/test
myusername=root
mypassword=123456
6.创建数据库访问接口
package com.wangxing.mybatis.mapper;
import com.wangxing.mybatis.bean.Person;
import java.util.List;
public interface PersonMapper {
/**
* 添加数据
*/
boolean insertPerson(Person person);
/**
*修改数据
*/
boolean updatePerson(Person person);
/**
* 删除数据
*/
boolean deletePersonById( int perid);
/**
* 根据id查询数据
*/
Person selectPersonByid(int perid);
/**
* 查询所有数据
*/
List<Person>selectPerson();
}
7.在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.mybatis.mapper.PersonMapper">
<insert id="insertPerson" parameterType="com.wangxing.mybatis.bean.Person">
insert into t_person values (null,#{pername},#{perage},#{peraddress});
</insert>
<update id="updatePerson" parameterType="com.wangxing.mybatis.bean.Person">
update t_person set per_name=#{pername},per_age=#{perage},per_address=#{peraddress} where per_id=#{perid};
</update>
<resultMap id="personMap" type="com.wangxing.mybatis.bean.Person">
<id column="per_id" property="perid"></id>
<result column="per_name" property="pername"></result>
<result column="per_age" property="perage"></result>
<result column="per_address" property="peraddress"></result>
</resultMap>
<select id="selectPersonByid" parameterType="int" resultMap="personMap">
select * from t_person where per_id=#{perid};
</select>
<select id="selectPerson" resultMap="personMap" >
select * from t_person;
</select>
<delete id="deletePersonById" parameterType="int">
delete from t_person where per_id=#{perid};
</delete>
</mapper>
8.在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="${mydriver}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
9.创建测试类
package com.wangxing.mybatis.test;
import com.wangxing.mybatis.bean.Person;
import com.wangxing.mybatis.mapper.PersonMapper;
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 java.util.List;
public class TestMain {
public static void testInsertPerson(){
//定义sqlSession对象
SqlSession sqlSession=null;
try {
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//从SqlSessionFactory中取得一个SqlSession对象
sqlSession=sqlSessionFactory.openSession();
//通过得到数据访问接口对象调用insertPerson方法
PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
Person person=new Person();
person.setPername("liming");
person.setPerage(88);
person.setPeraddress("西安");
personMapper.insertPerson(person);
//提交sqlsession
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void testUpdatePerson(){
//定义sqlSession对象
SqlSession sqlSession=null;
try {
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//从SqlSessionFactory中取得一个SqlSession对象
sqlSession=sqlSessionFactory.openSession();
//通过得到数据访问接口对象调用insertPerson方法
PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
Person person=new Person();
person.setPerid(1);
person.setPername("zhangsan");
person.setPerage(55);
person.setPeraddress("上海");
personMapper.updatePerson(person);
//提交sqlsession
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void testSelectPersonById(){
//定义sqlSession对象
SqlSession sqlSession=null;
try {
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//从SqlSessionFactory中取得一个SqlSession对象
sqlSession=sqlSessionFactory.openSession();
//通过得到数据访问接口对象调用insertPerson方法
PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
Person person=personMapper.selectPersonByid(1);
//提交sqlsession
sqlSession.commit();
System.out.println(person.getPerid()+"\t"+person.getPername()+"\t"+person.getPeraddress());
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void testSelectPerson(){
//定义sqlSession对象
SqlSession sqlSession=null;
try {
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//从SqlSessionFactory中取得一个SqlSession对象
sqlSession=sqlSessionFactory.openSession();
//通过得到数据访问接口对象调用insertPerson方法
PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
List<Person>personList=personMapper.selectPerson();
//提交sqlsession
sqlSession.commit();
System.out.println("personList.size()---"+personList.size());
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void testDeletePerson(){
//定义sqlSession对象
SqlSession sqlSession=null;
try {
//通过SqlSessionFactoryBuilder类创建出SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=
new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//从SqlSessionFactory中取得一个SqlSession对象
sqlSession=sqlSessionFactory.openSession();
//通过得到数据访问接口对象调用insertPerson方法
PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
personMapper.deletePersonById(1);
//提交sqlsession
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void main(String[] args) {
//测试添加用户信息
//testInsertPerson();
//修改用户信息
// testUpdatePerson();
//根据id查询用户信息
//testSelectPersonById();
//测试查询所有用户信息
//testSelectPerson();
//测试删除用户信息
testDeletePerson();
}
}