1.框架概念
在基础语言之上,对各种基础功能进行封装,方便开发者,提高开发效率;
java后端框架
mybaits:对jdbc进行封装
Spring:对整个java后端架构进行管理。
SpringWeb:对web(Servlet)层进行封装
SpringBoot:对Spring框架的搭建进行封装
2.MyBait框架概述
MyBatis 是一款优秀的持久层框架(dao层 数据访问层 数据持久层)。
3.Mybaits搭建
1.创建一个Maven项目
2.导入Mybaits依赖jar(在pom.xml文件中添加以下依赖)
<!--mybaits依赖--> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
3.创建一个全局的Mybaits配置文件,配置数据库连接等操作
在resource目录下创建一个mybaits.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> <!--配置数据库连接相关信息--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai" /> <property name="username" value="root" /> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration>
4.创建数据库,创建表,准备数据
create database ssmdb charset utf8
create table admin(
id int primary key auto_increment,
account varchar(32),
password varchar(32),
gender char(1)
)
5.创建一个访问的接口,并创建相关方法
在com.ffyc.mybaitspro.dao包下,创建AdminDao接口
public interface AdminDao { Admin finAdminById(int id); }
6.创建Admin对象
在com.ffyc.mybaitspro.model包下创建此对象,并重写toString()方法
package com.ffyc.mybaitspro.model; public class Admin { private int id; private String account; private String password; private String gender; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Admin(){ System.out.println("Admin无参的构造方法"); } @Override public String toString() { return "Admin{" + "id=" + id + ", account='" + account + '\'' + ", password='" + password + '\'' + ", gender='" + gender + '\'' + '}'; } }
7.测试Mybaits
public class Test1 { public static void main(String[] args) throws IOException { // 1.mybaits读取配置文件 Reader resourceAsReader = Resources.getResourceAsReader("mybaits.xml"); //2.创建 SqlSessionFactory 负责创建SqlSession对象(链接数据库的会话对象,类似Connection对象) SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsReader); //3.创建SqlSession对象 SqlSession sqlSession=sqlSessionFactory.openSession(); // 4.创建接口的代理对象(由框架生成) AdminDao adminDao=sqlSession.getMapper(AdminDao.class); //5.调用 Admin admin= adminDao.finAdminById(1);//让代理对象帮我们调用映射文件中与此接口中相同名称的方法。 System.out.println(admin); //关闭与数据库连接 sqlSession.close();//关闭与数据库的连接 } }
4.搭建补充
1.在IDEA中安装mybatisX插件
![](https://i-blog.csdnimg.cn/direct/f574aaf5e85046e382966f697010b0ca.png)
type="POOLED" 使用数据库连接池功能 数据库链接池 连接数据库:每次访问数据库,创建一个Connection,用完关闭, 但是访问量过大,每次都要创建新的对象,用完关闭,比较耗时 使用数据库连接池,在池(集合)中事先创建连接对象 用户访问时,直接池中获取一个连接对象 用完不销毁,还回到池中,这样就减少平凡创建销毁连接对象
4.Mybatis日志
![](https://i-blog.csdnimg.cn/direct/2561f40f05e749da8558db35c4b6b752.png)
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
5.参数传递
![](https://i-blog.csdnimg.cn/direct/4d102d1cd0f9474bb6202a31051444d0.png)
![](https://i-blog.csdnimg.cn/direct/be4640284560406db549570e0176baf6.png)
![](https://i-blog.csdnimg.cn/direct/963f5009cb354e4991d02812d8cf0deb.png)
数据库提交事务后,最在数据库中执行sql.确保一次操作中的多条sql,要么都成功,要么都不成功
![](https://i-blog.csdnimg.cn/direct/242a9d91ae7945e183a4da0aa004866e.png)
![](https://i-blog.csdnimg.cn/direct/c73f20e3f28140e2a127875b6ecb32d8.png)
<insert id="insertAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id" > insert into admin(account,password,gender)values(#{account},#{password},#{gender}) </insert>
![](https://i-blog.csdnimg.cn/direct/9329f092b23f41f2ab72461cbc2a8158.png)
//单元测试 /*以方法为单位,测试 * 使用junit组件实现单元测试 * */ @Test public void insert(){ System.out.println("新增"); Admin admin=new Admin(); admin.setAccount("aa"); admin.setPassword("111"); admin.setGender("男"); SqlSession sqlSession= MybatisUtil.getSQLSession(); AdminDao adminDao=sqlSession.getMapper(AdminDao.class); adminDao.insertAdmin( admin); sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。 //新增,修改,删除完毕后,都需要手动提交事务
sqlSession.close(); }
运行结果
(2)删除操作
在AdminDao接口中定义方法
然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id主键,删除行信息
<delete id="deleteAdmin" parameterType="int" > delete from admin where id =#{id} </delete>
在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行
//单元测试 /*以方法为单位,测试 * 使用junit组件实现单元测试 * */ @Test public void delete(){ System.out.println("删除"); SqlSession sqlSession= MybatisUtil.getSQLSession(); AdminDao adminDao=sqlSession.getMapper(AdminDao.class); adminDao.deleteAdmin(6); sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。 //新增,修改,删除完毕后,都需要手动提交事务。 sqlSession.close(); }
运行结果
运行前
运行后
(3)修改操作
在AdminDao接口中定义方法
然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id,修改行信息
<update id="updateAdmin" parameterType="Admin"> update admin set account=#{account},password=#{password},gender=#{gender} where id=#{id} </update>
在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行
@Test public void update(){ System.out.println("修改"); SqlSession sqlSession= MybatisUtil.getSQLSession(); AdminDao adminDao=sqlSession.getMapper(AdminDao.class); Admin admin=new Admin(); admin.setId(1); admin.setAccount("1212"); admin.setPassword("23232"); admin.setGender("女"); adminDao.updateAdmin(admin); sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。 //新增,修改,删除完毕后,都需要手动提交事务。 sqlSession.close(); }
运行结果
运行前
运行后
(4)查询操作
在AdminDao接口中定义方法
然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id,查询行信息
在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行
@Test public void select(){ System.out.println("修改"); SqlSession sqlSession= MybatisUtil.getSQLSession(); AdminDao adminDao=sqlSession.getMapper(AdminDao.class); Admin admin=new Admin(); adminDao.findAdminById(1); sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。 //新增,修改,删除完毕后,都需要手动提交事务。 sqlSession.close(); }
运行结果