目录
4,修改pom.xml文件,添加mybatis依赖,添加mysql依赖
7,配置jdbc.properties属性文件(配置数据库连接得基本信息)
8,添加SqlMapConfig.xml,mybatis的核心文件
10,添加数据库对数据表操作的StuMapper.xml文件
一,三层架构:
1,什么是三层架构
在项目开发中遵循的一种开发模式,分为三层:
1),界面层:负责接收客户端的数据,将数据传递给业务逻辑层处理,返回结果给客户端
2),业务逻辑层:整个项目的逻辑处理层,接收界面层的数据,传递给数据访问层,接受数据访问层的结构,返回数据结果给界面层
3),数据访问层:专门用来进行数据库的增删改查操作,向上为业务逻辑提供数据
界面层<————>业务逻辑层<————>数据访问层,各层之间不可以跨月访问。
为什么使用三层:
1,结构清晰,耦合度低,各层分工明确
2,可维护性搞,课扩展性高
3,有利于标准化
4,开发人员只需要注重一层功能结构的实现
5,有利于各层逻辑结构的实现。
2,常用框架SSM
Spring:Spring整合了其他框架,核心是IOC和AOP,由20多个模块组成
SpringMVC:Spring中的一员,专门用于优化控制器(Servlet)。提供了极为简单的数据提交,数据携带和数页面跳转。
MyBatis:持久化层的一个框架,用于优化数据访问,专注SQL语句
SSM是一个半成品软件,将公共的部分封装,重复问题解决,简化程序开发,他是可扩展,可复用的。
MyBatis执行流程图:
添加框架的步骤:
1,添加依赖
2,添加配置文件
二,使用MyBatis框架
一),使用mybatis框架得基本步骤:
1,新建数据库表
SHOW DATABASES;
USE ssm;
CREATE TABLE if not EXISTS stu(
id INT auto_increment PRIMARY KEY,
name VARCHAR(255) DEFAULT null,
email VARCHAR(255) DEFAULT null,
age int DEFAULT NULL
);
INSERT INTO stu(name,email,age) VALUES('张三','123@163.com' ,18);
INSERT INTO stu(name,email,age) VALUES('李四','345@163.com' ,28);
INSERT INTO stu(name,email,age) VALUES('王五','1433@163.com' ,38);
SELECT * FROM stu;
2,新建maven项目
3,补全maven工程目录
4,修改pom.xml文件,添加mybatis依赖,添加mysql依赖
<!--添加mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--添加muysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
5,修改pom.xml文件,添加资源文件指定
<!--添加资源文件的指定-->
<resources>
<resource>
<!-- 加载src/main/java下的所有一xml和properties结尾的文件到编译后的target文件中去
如果没有指定文件,默认是只加载java目录下的java文件,xml和properties会丢失-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!--上面设置了资源的加载路径,系统会以为修了默认的加载路径,如果不再次显示的把resources下的文件添加到文件加载路劲中去
那么系统就不会从resources中加载文件到target目录下-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
6,在idea中添加数据可视化
7,配置jdbc.properties属性文件(配置数据库连接得基本信息)
8,添加SqlMapConfig.xml,mybatis的核心文件
SqlMapConfig.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>
<!-- 引入配置信息 -->
<!-- 1,读取数据库配置文件properties -->
<!--
resource:从resources文件下读取文件名为jdbc.properties得文件
url: 从 绝对路径 中读取文件
-->
<properties resource="jdbc.properties" />
<!-- 2,配置数据环境变量(数据库得连接配置) -->
<environments default="development">
<!-- 这里面可以有很多个environment的id,default里面是哪个,下面的那个环境就生效 -->
<environment id="development">
<!-- 配置事务管理器 type:指定事务管理的方式,type的属性值是源码transactionManager包下的包名大写
JDBC:事务的控制交给开发人员处理 MANAGER:有容器来管理事务
-->
<transactionManager type="JDBC" />
<!-- 配置数据源,也可引用c3p0外部文件
JNDI:java命名目录接口接口,在服务器进行数据库连接池管理
POOLED:使用数据连接池进行数据库的连接配置
UNPOOLED:不适用数据库连接池
-->
<dataSource type="POOLED">
<!-- db.properties文件会被加载到内存创建一个个的全局变量,因此可以在此处引用,其实不止可以在此处引用在其他地方也可以使用 -->
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--3,注册mapper.xml文件-->
<mappers>
<!-- 映射的文件,也可以是类:框架根据此处的配置创建相应的实现类 -->
<!-- 从指定的路径下,
resource:找到文件名为resource的文件
url:指定绝对路径
class:动态代理方式下的注册
-->
<mapper resource="StuMapper.xml" />
</mappers>
</configuration>
9,创建实体类,用来封装数据
数据库连接池的引入:
10,添加数据库对数据表操作的StuMapper.xml文件
创建StuMapper.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.rd.mapper.XXXMapper">
</mapper>
<?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标签是整个文件的标签,用来开始和结束xml文件
mapper中的属性:namespace:指定命名空间(包名),用来区分不同mapper.xml中相等的id属性
-->
<mapper namespace="yyk">
<!-- id:通过指定ID来执行数据语句
返回值的集合时:返回值的类型必须是泛型
resultType:指定返回值的类型 ,必须是泛型,即一个类的全路径
parameterType:指定参数类型
-->
<select id="getAll" resultType="com.pojo.Stu" >
select id,name,email,age
from stu
</select>
</mapper>
StuMapper.xml创建完毕,需要去SqlMapConfig.xml中去注册mapper,否则无法使用该StuMapper
11,创建测试类,进行功能测试
按照这个流程书写测试代码:
package com.ssm;
import com.pojo.Stu;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyTest {
@Test
public void Test() throws IOException {
//1,使用文件流,读取核心配置文件SqlMapConfig.xml
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建sqlSessionFactory,bean工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession
SqlSession sqlSession = factory.openSession();
//4,执行sql
List<Stu> stu = sqlSession.selectList("yyk.getAll");
stu.forEach(stu1 -> {
System.out.println(stu1);
});
//5,释放资源
sqlSession.close();
}
}
mapper数据库查询语句映射Java的数据类型:
使用Mybatis对数据库进行增删改查
<?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标签是整个文件的标签,用来开始和结束xml文件
mapper中的属性:namespace:指定命名空间(包名),用来区分不同mapper.xml中相等的id属性
-->
<mapper namespace="yyk">
<!-- id:通过指定ID来执行数据语句
返回值的集合时:返回值的类型必须是泛型
resultType:指定返回值的类型 ,必须是泛型,即一个类的全路径
parameterType:指定参数类型
-->
<select id="getAll" resultType="com.pojo.Stu" >
select id,name,email,age
from stu
</select>
<!-- 按主键查询 -->
<select id="getById" parameterType="int" resultType="com.pojo.Stu">
select id,name,email,age
from stu
where id = #{id};
</select>
<!-- 模糊查询 -->
<select id="getByName" parameterType="string" resultType="com.pojo.Stu">
select id,name,email,age
from stu
where name like '%${name}%';
</select>
<!-- 增加 -->
<insert id="insert" parameterType="com.pojo.Stu">
insert into stu(name,email,age) values (#{name},#{email},#{age})
</insert>
<!-- 删除学生 -->
<delete id="delete" parameterType="int">
delete from stu where id = #{id};
</delete>
<!-- 修改 -->
<update id="update" parameterType="com.pojo.Stu" >
update stu set name = #{name},email = #{email},age = #{age}
where id = #{id}
</update>
</mapper>
package com.ssm;
import com.pojo.Stu;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyTest {
@Test
public void TestAll() throws IOException {
//1,使用文件流,读取核心配置文件SqlMapConfig.xml
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建sqlSessionFactory,bean工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession
SqlSession sqlSession = factory.openSession();
//4,执行sql;执行mapper的yyk下的sql getAll
List<Stu> stu = sqlSession.selectList("yyk.getAll");
stu.forEach(stu1 -> {
System.out.println(stu1);
});
//5,释放资源
sqlSession.close();
}
@Test
public void testByID() throws IOException {
//1,读取和兴配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建SessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,取出sqlsession对象
SqlSession sqlSession = factory.openSession();
//4,按主键查询
Stu stu = sqlSession.selectOne("yyk.getById",1);
System.out.println(stu);
//5,关闭sqlSession
sqlSession.close();
}
@Test
public void testByName() throws IOException {
//1,读取SqlMapConfig配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession对象
SqlSession sqlSession = factory.openSession();
//4,执行sql语句
List<Stu> list = sqlSession.selectList("yyk.getByName","李");
list.forEach(stu -> System.out.println(stu));
System.out.println(list.size());
//5,释放资源
sqlSession.close();
}
@Test
public void testInsert() throws IOException{
//1,读取SqlMapConfig配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession对象
SqlSession sqlSession = factory.openSession();
//4,执行sql语句
int num = sqlSession.insert("yyk.insert",new Stu("钱六","234@163.com",20));
//在所有的增删改中,需要手工提交事务
sqlSession.commit();
//5,释放资源
sqlSession.close();
}
@Test
public void testDelete() throws IOException{
//1,读取SqlMapConfig配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession对象
SqlSession sqlSession = factory.openSession();
//4,执行sql语句
int num = sqlSession.delete("yyk.delete",1);
System.out.println(num);
//在所有的增删改中,需要手工提交事务
sqlSession.commit();
//5,释放资源
sqlSession.close();
}
@Test
public void testUpdate() throws IOException{
//1,读取SqlMapConfig配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3,获取sqlSession对象
SqlSession sqlSession = factory.openSession();
//4,执行sql语句
int num = sqlSession.update("yyk.update",new Stu(3,"tt","234@163.com",100));
System.out.println(num);
//在所有的增删改中,需要手工提交事务
sqlSession.commit();
//5,释放资源
sqlSession.close();
}
}