SSM
SpingMVC + Spring + Mybatis
SpringMVC 充当Servlet 可以理解为SpringMVC是Spring的WEB支持
Mybatis 充当Dao层
Sping 充当一个润滑油的角色
MybatisPlus 国内的团队 baomidou 可以写sql 也可以不写sql 处理复杂需求介于Mybatis和Hibernate之间
Hibernate 充当Dao层 不需要写sql 自动生成并执行sql语句
Mybatis
作用
-
是一款优秀的持久层框架 支持定制化的sql 存储过程以及高级映射
-
之前我们学过的所有的JDBC代码和手动设置参数获取结果集 都不用写了
-
使用简单的XML配置文件或者注解 来映射原生信息 更加的方便
持久化
持久化把数据存储在磁盘而不是内存
-
程序产生的数据首先都是在内存
-
内存不可靠 我们需要一些技术把数据永久存储在硬盘上
持久层
之前的Dao层 之前通过反射 通过泛型 通用的Dao 我们在操作不同的表或者逻辑的时候 我们之前会创建一个接口 在创建接口的实现类 实际上这个dao层 就叫持久层(让数据持久化的层)
优缺点
-
sql语句与代码分离 寄存于xml文件中(最牛X的特点)
-
优点:便于维护管理 不用在java代码中找sql语句
-
缺点:不能通过打断点的方式调试,通过日志来解决这个问题
-
-
动态sql语句(最牛X的特点)
-
优点:通过逻辑标签代替编写逻辑代码 生成不同的sql
-
缺点:拼接一些比较复杂的sql语句时,没有直接拼接更直观
-
-
查询结果和java对象自动映射
-
优点:保证名称之间的对应关系 可以下划线和驼峰自动转换
-
缺点:对开发人员的sql语句以来很强
-
XML配置文件
约束
保证我们的xml能够使用哪些标签 保证xml的有效性
主配置文件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 环境们 配置数据库连接相关 可以配置多个数据库连接 -->
<environments default="development">
<environment id="development">
<!--事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/lyh_db03?useUnicode=true&characterEncoding=utf-8/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
</configuration>
另外一个xml
第一次使用Mybatis 需要两个文件
-
一个接口类mapper(就是咱们之前写的dao)java文件 不需要我们写实现类
-
一个接口对应一个xml文件
-
两个文件的名字最好相同 UserMapper.java -> UserMapper.xml
-
框架会根据mapper和xml联合 通过代理模式创建实现类
-
一般情况下 我们管接口对应的xml的文件叫映射文件
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace: 对应mapper接口的全类名 -->
<mapper namespace="com.jsoft.dao.UserMapper">
<!-- 写sql语句 -->
<!--
id mapper接口中的方法名
resultType 方法的返回值类型 如果时entity类型 需要全类名
parameterType 方法的入参的类型 可以省略
#{id} 代表方法的入参 类似于之前的? 占位符 Mybatis底层使用的是什么? PreparedStatement
-->
<select id="selectUserById" resultType="com.jsoft.entity.User" parameterType="">
select id,username,password from user where id = #{id}
</select>
</mapper>
映射文件最终要交给mybatis去处理,所有的映射文件需要在主配置文件中进行注册。
<?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>
<!-- 注册各个映射文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
测试类
可以将重复的语句 使用@Before @After 注释
@Before 在所有方法执行之前执行
@after 在所有方法执行之后执行
public class UserMapperTest {
SqlSession session;
UserMapper mapper
@Before
public void before(){
InputStream inputStream = UserMapperTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 获取session
session = sqlSessionFactory.openSession();
//获取对应的mapper
mapper = session.getMapper(UserMapper.class);
}
@After
public void after(){
try {
session.commit();
session.close();
}catch(Exception e){
e.printStackTrace();
session.rollback();
}
}
@Test
public void testSelectUserById(){
// 调接口里的方法
User user = mapper.selectUserById(1);
System.out.println(user);
}
}
Mybatis有两种方式可以提交事务
1.通过session调用commit方法
2.关闭session
在Mybatis的映射文件中 $和#的区别?
$ 底层使用的是Statement 拼串
·#· 底层使用的时PrepareStatement 预编译 #相当于占位符
如果想要做模糊查询 在我们java代码层面去解决%问题
标签:xml,mapper,SSM,mybatis,session,sql,Mybatis,基本概念 From: https://www.cnblogs.com/lyh15552012044/p/16706234.html