第一章框架的概述
1三层结构
mvc web开发 使用mvc架构模式 m:数据 v;视图 c:控制器
c控制器:接收请求 调用service对象 显示请求的处理信息 当前的servlet作为控制器
v:视图现在使用jsp html css js显示请求的处理结果 把m中的数据取出来
m:来自数据库mysql中 来自文件 来自网络
mvc作用:(1)实现解耦合
(2)让mvc各司其职
(3)使系统扩展更好 更容易维护
三层架构
1界面层:接受用户请求 调用service显示请求的处理结果 包含jsp html servlet等对象
2业务逻辑层 处理业务逻辑 使用算法处理数据 把数据返回给界面层 对应的service包 和包中的很多的XXXService类例如 StudentService
3持久层 (数据库访问)访问数据库 或者读取文件 访问网络 获取数据 对应的包是dao dao包中很多的StudentDao,OrderDao ,ShopDao等等
三层架构请求的处理流程
用户发起————————》界面层————————》业务逻辑层——————》持久层——————》数据库
为什么使用三层架构
1结构清晰 耦合度底 各层分层明确
2可维护性搞 可扩展性搞
3有利于标准化
4开打人员可以只关注整个结构中某一层的功能实现
5有利于各层逻辑的复用
4.三层架构模式和框架
每层对应着一个框架
1界面层SpringMVC
2业务层Spring
3持久层MyBatis
5框架
1什么是框架(framework)
框架就是一个软件,完成了部分的功能 软件中的类和类方法的调用已经规定好了。通过这些可以完成某些功能。框架看做是模板。
框架是可以升级改造的 框架是安全的。
框架是对某一方面有用的,不是全能的。
6框架解决的问题
1框架实现技术的整合。
7jdbc访问数据库的优缺点
优点
1直观 好理解
缺点:
1创建很多对象Connection,Statement,ResultSet
2注册驱动
3执行sql语句
4把ResultSet转为Student,List集合
5关闭资源
6sql语句和业务逻辑代码混在一起
8MyBatista框架
什么是MyBatis:是一个持久层框架 原名 为ibatis 2013改名为MyBatis。Mybatis可以操作数据库对数据执行增删改查。
看作是一个高级的JDBC能解决JDBC的缺点
Mybatis能做什么?
1注册驱动
2能够去创建JDBC中的Connection Statement Result
3执行sql语句 得到ResultSet
4处理Reslut 把记录集中的数据转化为java对象,同时还能把Java对象放入到List集合中
5关闭资源
6实现sql语句和java代码的解耦合
第2章MyBatis入门
2.1第一个例子
实现步骤
0创建student表(id,name,email,age)
1新建maven项目
2修改pom.xml
1)加入依赖mybatis依赖,mysql驱动,junit
mybatis依赖
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
mysql依赖
<!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<dependency>
2)在加入资源库插件
3创建实体类Student。定义属性,属性名和列名一致
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
public Student(Integer id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = 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;
}
@Override
public String toString() {
return "学生实体的信息{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
4创建Dao接口,定义操作数据库的方法
5创建xml文件(mapper)写sql语句
这里在resources中创建了一个StudentDao.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.gjx.dao.StudentDao">
<!-- <select id="selectBlog" resultType="Blog">-->
<!-- select * from Blog where id = #{id}-->
<!-- </select>-->
<!-- 查询一个学生Student
<select>:表示查询操作,里面是select语句
id:要执行的sql语句的唯一标识,是一个自定义字符串
推荐使用dao接口中的方法名称
resultType:告诉mybatis,执行sql语句,把数据赋值给那个类型的java对象。
resultType的值现在使用的java对象的全限定名称
-->
<select id="selectStudentById" resultType="com.gjx.domain.Student">
select id,name,email,age from student where id=1001
</select>
<insert id="addStuent">
insert into student values (1009,"asd","sss",12),(1023,"aa0","ddd",12)
</insert>
<update id="updateStudent">
update student set name ="hh",email="1111",age=12 where id=1001
</update>
<delete id="deleteStudent">
delete from student where id=1001
</delete>
</mapper>
<!--
1.约束文件
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
用来定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序
2.mapper是根标签
namespace:命名空间 必须有值不能为空。唯一值
推荐使用Dao是接口的全限定名称
作用:参与识别sql语句的作用
3.在mapper中可以写 insert update delete select等标签
-->
mybatis框架推荐把sql语句和java代码分开 mapper文件:定义和dao接口在同一个目录,一个表一个mapper文件。 6创建mybatis的主配置文件(xml文件):有一个,放在resources目录下 1)定义创建连接实例的数据源(DataSource)对象 2)指定其他mapper文件的位置
<?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>
<!--设置日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据源:创建Connection对象-->
<dataSource type="POOLED">
<!-- driver:驱动的内容-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的url-->
<property name="url"
value="jdbc:mysql://localhost:3306/springdb?useUnicode=true&charaterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 指定其他mapper文件的位置:
其他mapper文件目的是找到其他文件的sql语句
-->
<mappers>
<!-- 使用mapper的resource属性指定mapper文件的路径
这个路径是从target/classes路径开启的
使用注意:
resource=“mapper”文件的路径,使用/分割路径
一个mapper resource指定一个mapper文件
-->
<mapper resource="StudentDao.xml"/>
<!-- 举列子
<mapper resource="com/gjx/dao/UserDao.xml"/>
<mapper resource="com/gjx/dao/orderDao.xml"/>
-->
</mappers>
</configuration>
7创建测试的内容
使用main方法,测试mybatis访问数据库
也可以使用junit访问数据库
package com.gjx;
import com.gjx.domain.Student;
import com.sun.javaws.IconUtil;
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 javax.annotation.Resource;
import javax.imageio.stream.ImageInputStream;
import java.io.IOException;
import java.io.InputStream;
public class MyTest {
@Test
public void testSelectStudentById() throws IOException {
String config="mybatis.xml";
InputStream inputStream=Resources.getResourceAsStream(config);
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=factory.openSession();
int insert=session.delete("com.gjx.dao.StudentDao.deleteStudent");
System.out.println(insert);
session.commit();
session.close();
}
}
注意
增删改都需要手动提交
session.commit();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)