企业做网站etp和源程序,久久建筑网 023dir,图片素材的网站,深圳品牌建网站1.0 概述
1.三层架构 界面层#xff1a; 和用户打交道的#xff0c; 接收用户的请求参数#xff0c; 显示处理结果的。#xff08;jsp #xff0c;html #xff0c;servlet#xff09; 业务逻辑层#xff1a; 接收了界面层传递的数据#xff0c;计算逻辑#xff0c;…1.0 概述
1.三层架构 界面层 和用户打交道的 接收用户的请求参数 显示处理结果的。jsp html servlet 业务逻辑层 接收了界面层传递的数据计算逻辑调用数据库获取数据 数据访问层 就是访问数据库 执行对数据的查询修改删除等等的。 三层对应的包界面层 controller包 servlet业务逻辑层 service 包XXXService类数据访问层 dao包XXXDao类三层中类的交互用户使用界面层-- 业务逻辑层---数据访问层持久层--数据库mysql三层对应的处理框架界面层---servlet---springmvc框架业务逻辑层---service类--spring框架数据访问层---dao类--mybatis框架2.框架 框架是一个舞台 一个模版
模版 1. 规定了好一些条款内容。 2. 加入自己的东西
框架是一个模块 1.框架中定义好了一些功能。这些功能是可用的。 2.可以加入项目中自己的功能 这些功能可以利用框架中写好的功能。
框架是一个软件半成品的软件定义好了一些基础功能 需要加入你的功能就是完整的。 基础功能是可重复使用的可升级的。
框架特点 1. 框架一般不是全能的 不能做所有事情 2. 框架是针对某一个领域有效。 特长在某一个方面比如mybatis做数据库操作强但是他不能做其它的。 3. 框架是一个软件
mybatis框架 一个框架早期叫做ibatis, 代码在github。 mybatis是 MyBatis SQL Mapper Framework for Java sql映射框架 1sql mapper :sql映射 可以把数据库表中的一行数据 映射为 一个java对象。 一行数据可以看做是一个java对象。操作这个对象就相当于操作表中的数据
2Data Access ObjectsDAOs : 数据访问 对数据库执行增删改查。
mybatis提供了哪些功能
提供了创建Connection ,Statement, ResultSet的能力 不用开发人员创建这些对象了提供了执行sql语句的能力 不用你执行sql提供了循环sql 把sql的结果转为java对象 List集合的能力 while (rs.next()) { Student stu new Student(); stu.setId(rs.getInt(“id”)); stu.setName(rs.getString(“name”)); stu.setAge(rs.getInt(“age”)); //从数据库取出数据转为 Student 对象封装到 List 集合 stuList.add(stu); }提供了关闭资源的能力不用你关闭Connection, Statement, ResultSet
开发人员做的是 提供sql语句 最后是 开发人员提供sql语句–mybatis处理sql—开发人员得到List集合或java对象表中的数据
总结 mybatis是一个sql映射框架提供的数据库的操作能力。增强的JDBC, 使用mybatis让开发人员集中精神写sql就可以了不必关心Connection,Statement,ResultSet 的创建销毁sql的执行。
1.1 使用 Mybatis 准备
下载 mybatis https://github.com/mybatis/mybatis-3/releases
1.2 搭建 MyBatis 开发环境
1 创建 mysql 数据库和表
数据库名 ssm 表名 student
CREATE TABLE student (id int(11) NOT NULL ,name varchar(255) DEFAULT NULL,email varchar(255) DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;2 创建 maven 工程
添加模块
创建 maven 工程信息如下 选择模板 加入
archetypeCatalog
Internal这两行代码 目的加速Maven项目的加载 然后点击 完成-应用 即可 新建一个resources目录鼠标右键该resources选择标记目录为并设置为Test Resources根 3 删除默认创建的 App 类文件 4 在pom.xml文件中加入 maven 坐标
dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency!--mybatis依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.1/version/dependency!--mysql驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.9/version/dependency/dependencies5 在pom.xml文件中加入 maven 插件
buildresourcesresourcedirectorysrc/main/java/directory!--所在的目录--includes!--包括目录下的.properties,.xml 文件都会扫描到--include**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resource/resourcespluginspluginartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin/plugins/build 6 编写 Student 实体类setter,getter,toString
创建包 com.zep.domain, 包中创建 Student 类 项目结构如下所示
Student.java文件:
package com.zep.domain;
// 推荐和表名一样容易记忆
public class Student {// 定义属性目前要求是 属性名和列名保持一致private Integer id;private String name;private String email;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}Overridepublic String toString() {return Student{ id id , name name \ , email email \ , age age };}
}
7 编写 Dao 接口 StudentDao
创建 com.zep.dao 包创建 StudentDao 接口 StudentDao.java文件 package com.zep.dao;import com.zep.domain.Student;import java.util.List;// 接口操作student表
public interface StudentDao {//查询student表中的所有数据ListStudent selectStudents();//插入方法//参数student,表示要插入到数据库的数据//返回值int,表示执行insert操作后的影像数据库的行数int insertStudent(Student student);//更新方法int updateStudent(Student student);//删除方法int deleteStudent(int id);}
8 编写 Dao 接口 Mapper 映射文件 StudentDao.xml
要求
在 dao 包中创建文件 StudentDao.xml要 StudentDao.xml 文件名称和接口 StudentDao 一样区分大小写的一样。
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
!--namespace必须有值自定义的唯一字符串推荐使用dao 接口的全限定名称
-- mapper namespacecom.zep.dao.StudentDao!--select: 查询数据 标签中必须是 select 语句id: sql 语句的自定义名称推荐使用 dao 接口中方法名称使用名称表示要执行的 sql 语句resultType: 查询语句的返回结果数据类型使用全限定类名--select idselectStudents resultTypecom.zep.domain.Student!--要执行的 sql 语句--select id,name,email,age from student order by id/select!--select:表示查询操作。id:你要执行的sql语句的唯一标识mybatis会使用这个id的值找到要执行的sql语句。可以自定义但是要求你使用接口中的方法名称。resultType表示结果类型是sql语句执行后得到的ResultSet,遍历这个ResultSet的到的java对象的类型值写的是类型的全限定名称--!--插入操作#{id},#{name},#{email},#{age}中的id,name,email,age是student实体类中的属性名称--insert idinsertStudentinsert into student(id,name,email,age) values(#{id},#{name},#{email},#{age})/insertupdate idupdateStudentupdate student set age #{age} where id#{id}/updatedelete iddeleteStudentdelete from student where id#{studentId}/delete/mapper!--sql映射文件写sql语句的mybatis会执行这些sql1.指定约束文件!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmybatis-3-mapper.dtd是约束文件的名称扩展名是dtdd的。2.约束文件的作用用来限制检查在当前文件中出现的标签和属性必须符合mybatis的要求3.mapper 是当前文件的跟标签必须有namespace:叫做命名空间唯一值可以是自定义的字符串要求你使用dao接口的全限定名称。4.在当前文件中可以使用特定的标签表示数据库的特定操作select:表示执行查询操作update:表示执行更新数据库的操作就是在update标签中写的是update sql语句insert:表示插入放的是insert语句delete:表示删除执行的delete语句--
9 创建 MyBatis 主配置文件
项目 src/main 下创建 resources 目录设置 resources 目录为 resources root 创建主配置文件名称为 mybatis.xml 说明主配置文件名称是自定义的内容如下
?xml version1.0 encodingUTF-8 ?!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--mybatis.xml 文件加入日志配置可以在控制台输出执行的 sql 语句和参数--
settingssetting namelogImpl valueSTDOUT_LOGGING /
/settings
!--
配置 mybatis 环境数据库的连接信息
default:必须和某个environment标签中的id值一样。
告诉mybatis使用哪个数据库的连接信息。也就是访问哪个数据库
--
environments defaultmysql!--id:数据源的名称一个唯一值可自定义用来表示环境的名称--environment idmysql!--配置事务类型使用 JDBC 事务使用 Connection 的提交和回滚type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)--transactionManager typeJDBC/!--数据源 dataSource创建数据库 Connection 对象type: POOLED 使用数据库的连接池--dataSource typePOOLED!--连接数据库的四个要素driver,user,username,password名字是固定的不能自定义--!--数据库的驱动类名--property namedriver valuecom.mysql.jdbc.Driver/!--连接数据库的url字符串--property nameurl valuejdbc:mysql://localhost:3306/ssm/!--访问数据库的用户名--property nameusername valueroot/!--密码--property namepassword valueroot//dataSource/environment
/environments
mappers!--告诉 mybatis 要执行的 sql 语句的位置sql mappersql映射文件的位置一个mapper标签指定一个文件的位置。位置是从类路径开始的路径信息。类路径target/classes(类路径)--mapper resourcecom/zep/dao/StudentDao.xml/
/mappers
/configuration!--mybatis的主配置文件主要定义了数据库的配置信息sql映射文件的位置。1.约束文件!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtdmybatis-3-config.dtd约束文件的名称2.configuration 根标签--
10 创建测试类 MyBatisTest
src/test/java/com/zep/ 创建 MyBatisTest.java 文件
package com.zep;import com.zep.domain.Student;
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 TestMybatis {Testpublic void testSelect() throws IOException {// 1.定义mybatis主配置文件的名称,从类路径的跟开始也就是target/classesString config mybatis.xml;// 2.读取这个config表示的文件InputStream in Resources.getResourceAsStream(config);// 3.创建SqlSessionFactoryBulider对象SqlSessionFactoryBuilder builder new SqlSessionFactoryBuilder();// 4.创建SqlSessionFactorySqlSessionFactory factory builder.build(in);// 5.【重要】获取SqlSession对象从SqlSessionFactory中获取SqlSessionSqlSession sqlSession factory.openSession();// 6.【重要】指定要执行的sql语句的标识。sql映射文件中的namespace “.” 标签的id值String sqlId com.zep.dao.StudentDao . selectStudents;// 7.执行sql语句通过sqlId找到语句ListStudent studentList sqlSession.selectList(sqlId);// 8.输出结果// studentList.forEach(student - System.out.println(student));for (Student student : studentList) {System.out.println(查询到的学生 student);}// 9.关闭SqlSession对象sqlSession.close();}//测试方法测试功能Testpublic void testInsert() throws IOException {//1.mybatis 主配置文件String config mybatis.xml;//2.读取配置文件InputStream in Resources.getResourceAsStream(config);//3.创建 SqlSessionFactory 对象SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in);//4.获取 SqlSessionSqlSession session factory.openSession();//5.创建保存数据的对象Student student new Student();student.setId(1005);student.setName(张丽);student.setEmail(zhangli163.com);student.setAge(20);//6.执行插入 insertint rows session.insert(com.zep.dao.StudentDao.insertStudent, student);//7.提交事务session.commit();System.out.println(增加记录的行数: rows);//8.关闭 SqlSessionsession.close();}Testpublic void testUpdate() throws IOException {//1.mybatis 主配置文件String config mybatis.xml;//2.读取配置文件InputStream in Resources.getResourceAsStream(config);//3.创建 SqlSessionFactory 对象SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in);//4.获取 SqlSessionSqlSession session factory.openSession();//5.创建保存数据的对象Student student new Student();student.setId(1005);//要修改的 idstudent.setAge(30); //要修改的年龄值//6.执行更新 updateint rows session.update(com.zep.dao.StudentDao.updateStudent, student);//7.提交事务session.commit();System.out.println(修改记录的行数: rows);//8.关闭 SqlSessionsession.close();}Testpublic void testDelete() throws IOException {//1.mybatis 主配置文件String config mybatis.xml;//2.读取配置文件InputStream in Resources.getResourceAsStream(config);//3.创建 SqlSessionFactory 对象SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in);//4.获取 SqlSessionSqlSession session factory.openSession();//5.删除的 idint id 1005;//6.执行删除 deleteint rows session.delete(com.zep.dao.StudentDao.deleteStudent,id);//7.提交事务session.commit();System.out.println(修改记录的行数:rows);//8.关闭 SqlSessionsession.close();}
}
11运行结果如下 1.3总结 1.4开发中常见的问题
读取不到dao文件夹下的StudentDao.xml文件 原因target目录下确实不存在StudentDao.xml文件所有读取不到 解决方案在pom.xml文件中加入以下配置 buildresourcesresourcedirectorysrc/main/java/directory!--所在的目录--includes!--包括目录下的.properties,.xml 文件都会扫描到--include**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resource/resources/build2. 读取不到resources文件夹下的mybatis.xml文件 原因没有将resources文件夹标记为Test resources 根 解决方案 注意如果以上两种方法尝试后仍然存在读取不到文件的问题则使用以下方法 还不行的话重构工程 还不行就删除缓存重启IDEA
最后还是不行的话暴力解决相当于手动读取 直接将项目目录下的StudentDao.xml文件复制粘贴到classes目录下对应的位置 把mybatis.xml复制粘贴到classes目录下
目录结构中找不到target文件夹 解决方案 pom.xml文件中的依赖没有导入成功 解决方案手动重新导入即可 重新导入成功后就能看见对应的jar包了