框架(FramWork)
本质上就是一个应用,完成了部分功能,让使用者能少写代码,提高开发效率;
- 框架都是"不要重复造轮子",帮我们将公用的基础功能已经封装好了;
- 框架制定了一套规则,使用该框架的开发人员,都需要遵守该规则,代码的形 式就会规范和统一起来,代码就会好维护
Mybatis:是一个持久层的框架
- 轻量级的持久层框架,只需要导入一个jar包即可
- 自己定制SQL语句
- SQL和代码松耦合
- 动态SQL可以让SQL语句更加灵活
ORM框架:对象关系映射 将java对象映射成数据库需要的数据格式;也可以将数据库的数据映射成java对象
mybatis提供强大的高级映射 多表联查时的场景
mybatis
配置文件和映射文件
配置文件 配置数据源、设置、java类型别名、插件等待
映射文件
mybatis 面向接口的开发
- 创建dao接口
- 将该接口和某个映射文件关联起来
- 使用动态代理的方式,在运行时根据接口和映射文件生成该接口的实现类
mybatis的加载过程
获取配置文件
InputStream in = Resources.getResourceAsStream("config.xml");
创建session工厂构建器对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
通过构建器对象加载配置文件,并且构建工厂对象
SqlSessionFactory factory = builder.build(in);
通过工厂对象,获取SqlSession对象
SqlSession session = factory.openSession();
通过session对象的API方法来执行映射文件中的SQL语句
1.要执行的SQL语句的标识:namespace.id 2.要传递的参数
int row = session.update("first.update", student);
config.xml配置
将此行代码复制粘贴在config,xml文件中
<!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"/>
在<environments>
标签中进行环境配置 以及设置连接数据库的相关配置,此标签可以写多个数据库的环境配置,此处为mysql数据库的环境配置
在<environment id="mysql">
标签中表明要连接的数据库
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="数据库名称"/>
<property name="password" value="数据库密码"/>
<property name="url" value="数据库的url/>
</dataSource>
<mappers>
<!-- 配置映射文件 -->
</mappers>
映射文件
id(必须):SQL语句的唯一标识,通过id可以找到该语句
parameterType(可选):参数类型
useGeneratedKeys:true代表添加记录时,返回自增的主键值
keyColumn:自增主键的字段名
keyProperty:将主键值赋值给参数对象的哪个成员变量
<insert id="add"
parameterType="com.lanou.model.Student"
useGeneratedKeys="true"
keyColumn="id"
keyProperty="id">
<!--
#{属性名}:获取到参数对象对应名称的属性值,
例如#{name}就是获取到Student对象的name属性的值
-->
insert into student (name,age) values (#{name},#{age})
</insert>
<!--
默认使用的是PreparedStatement对象执行SQL语句
statementType:设置执行SQL的对象类型
STATEMENT:Statement
PREPARED(默认):PreparedStatement
CALLABLE:CallableStatement 执行存储过程的
-->
<update id="update" statementType="PREPARED">
update student set name=#{name} where id=#{id}
</update>
<delete id="del">
delete from student where id=#{id}
</delete>
<!--
查询时resultType属性是必须指定的
resultType:结果集要映射成的java类型
-->
<select id="query" resultType="com.lanou.model.Student">
select * from student where id=#{id}
</select>
<!--
如果查询结果为多条记录,resultType处填写的类型是集合中的元素类型
-->
<select id="queryAll" resultType="com.lanou.model.Student">
select * from student
</select>
</mapper>
结束之后便可以在main方法中用session调用配置文件中的sql语句对数据库进行操作。