一、初识mybatis
1、mybatis概述
mybatis:也被成为ORM(Object/Relational Mappering ,对象关系映射)框架。
是一种为了解决面向对象的关系与关系型数据库不匹配的问题,是将java对象与数据库表之间的对象持久到关系型数据库表。
通俗来说就是把连接数据库和对数据库进行修改的任务由框架代劳了,开发人员通过使用mybatis的方式来管理数据库,由mybatis将sql传给数据库执行
2、mybatis的入门程序
首先添加配置文件:在mybatis.xml的文件下添加数据库连接依赖等等。在SSM的配置文件中已有书写
以下是书写常用的mapper文件中的命令书写格式
- 查询用户
<?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="此处填写DAO接口的全限定名称">
<select id="此处填写DAO接口中对应的方法名称" resultType="返回值对象的类的全限定名称">
select id,name,age from student;//select语句
</select>
<insert id="insertStudent">
insert into student(name,age) values(#{name},#{age})
</insert>
</mapper>
- 添加用户
<?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="此处填写DAO接口的全限定名称">
<insert id="此处填写DAO接口中对应的方法名称">
insert into student(name,age) values(#{name},#{age})//填写insert语句
//其中的#{name}是表示占位符的意思,会自动匹配和传入的字段一样的属性填入其中
</insert>
</mapper>
- 修改用户信息
<?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="此处填写DAO接口的全限定名称">
<update id="修改的方法的名称" >
update student set name = #{name} where id = #{id}
</update>
</mapper>
- 删除用户
<?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="此处填写DAO接口的全限定名称">
<delete id="修改的方法名称">
delete from student where id = #{id}
</delete>
</mapper>
二、mybatis的核心配置
1、sqlsessionFactory
是一个为了创建sqlsexxion的工具人罢了。可以通过sqlsexssionFactoryBuilder来创建。
创建方法如下:
SqlSesstionFactory sqlSesstionFactory = new SqlsexxtionFactoryBuilder.builder.getResourceAsStreram("配置文件位置");
sqlsexxtionFactory是线程安全的,一旦被创建,在整个应用执行期间都会存在。如果多次创建同一个数据库的sqlssstionFactory.那么数据库的资源很容易耗尽,因此在构建sqlsesstionFactory的时候一般都是使用的单例模式构建
2、sqlsession
是一个应用程序与持久层之间执行交互操作的一个单线程对象,它的主要作用是执行持久化操作,他执行在java程序中的所有的sql语句,是线程不安全的,每次使用完要记得关闭
3、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>
<settings>
<!--设置输出日志使用的-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--设置别名-->
<typeAliases>
<!--将实体类中的所有实体对象都取了一个与类名相同的别名-->
<package name="com.bjpowernode.damain"/>
</typeAliases>
<!--sqlmapper映射文件(以xml结尾的文件的位置)的位置-->
<mappers>
<!--一次将一个包下的所有的映射文件(结尾为xml的文件)都映射出去-->
<package name="com.bjpowernode.dao"/>
<!--此方法可以一次映射一个文件的位置
<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>-->
</mappers>
</configuration>
动态sql
1、为什么要是用动态sql
因为在处理逻辑较为复杂的业务的时候,简单的sql语句可能不能完成业务的要求,需要将sql语句来回拼接完成对于业务的操作,所以在这里提出了动态sql的操作,可以利用逻辑语句,动态的拼接sql语句
2、<if>语句的使用
在mapper的文件中使用
<select id="selectStudents" resultType="com.bjpowernode.damain.Student">
select id,name,age from student
<if test="name != null and name !=''">
and name like "#{name}"
</if>
</select>
3、<choose>、<when>、<otherwise>的使用
<select id="selectStudents" resultType="com.bjpowernode.damain.Student">
select id,name,age from student where 1=1
<choose>
<when test="name!= null and name !=''">
and name like #{name}
</when>
<otherwise>
and age is not null
</otherwise>
</choose>
</select>
4、循环遍历元素foreach
<select id="selectStudents" resultType="com.bjpowernode.damain.Student">
select id,name,age from student where 1=1
<foreach collection="list" >
#{id}
</foreach>
</select>