一、初识MyBatis
MyBatis官网:MyBatis官网 1.什么是MyBatis MyBatis是一个支持普通sql查询、存储过程以及高级映射的持久层框架,MyBatis框架也被称为ORM(Object/Relational Mapping,对象关系映射)框架。
ORM的主要作用是在编程中,使用面向对象的方式来操作持久化对象,把面向对象的概念与数据库中表的对应起来。
举个栗子:我定义一个类,此时就对应着数据库的一张表,这个对象的实例,就对应着表中的一条记录。
Java概念 | 数据库概念 |
---|
类 | 表 | 属性 | 字段/列 | 对象 | 记录/行 |
2.特点 (1)轻量级,性能出色,面向接口编程 (2)sql与Java业务代码分离 (3)可以使用xml或注解用于配置和映射 3.MyBatis面向接口编程的两个一致: (1)映射文件的namespace要和mapper接口的全类名保持一致 (2)映射文件中sQL语句的id要和mapper接口中的方法名一致 4.Mybatis框架的执行流程 (1)读取mybatis配置文件; (2)加载映射文件xxxMapper.xml; (3)构建会话工厂SqlSessionFactory; (4)构建会话对象SqlSession; (5)Executor执行器,执行相关操作; (6)MappedStatement对象; (7)输入映射; (8)输出映射;
@Test
public void insertUser() throws Exception {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession(true);
UserMapper userMapper = session.getMapper(UserMapper.class);
int result = userMapper.insertUser();
System.out.println("result="+result);
session.close();
}
5.log4j日志的级别 FATAL(致命)> ERROR(错误)> WARN(警告)> INFO(信息)> DEBUG(调试) 从左到右打印的信息越来越详细。 6.四种mapper映射文件的引入方式
<mappers>
<mapper resource="com/jd/wds/mappers/ParameterMapper.xml"/>
</mappers>
<mappers>
<mapper url="file:\\\E:\Spring\Mbatis\mybatis-demo02\src\main\resources\com\jd\wds\mappers\ParameterMapper.xml"/>
</mappers>
<mappers>
<mapper class="com.jd.wds.mappers.ParameterMapper"/>
</mappers>
<mappers>
<package name="com.jd.wds.mappers"/>
</mappers>
二、Mybatis开发说明
1.需要引入的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.查询功能的标签必须设置resultType或resultMap resultType:设置默认的映射关系(字段名和属性名一致) resultMap:设置自定义的映射关系(字段名和属性名不一致、多对一、一对多映射) 3.对user表的增删改查操作(UserMapper.xml)
<insert id="insertUser">
insert into user values(null,"小王","男",17,"1234@qq.com")
</insert>
<delete id="deleteUser">
delete from user where id = #{id}
</delete>
<update id="updateUserById">
update user set name = "小张" where id = #{id}
</update>
<select id="findUserById" resultType="com.jd.wds.pojo.User" >
select * from user where id = #{id}
</select>
<select id="findAllUser" resultType="com.jd.wds.pojo.User">
select * from user
</select>
4.mybatis核心配置文件mybatis-config.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>
<properties resource="jdbc.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="cn.itcast.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
三、Mybatis获取参数值两种方式
Mybatis获取参数值有两种方式:#{} 和 ${} #{}本质:占位符?赋值 ${}本质:字符串拼接 (1)mapper接口的方法参数为单个的字面量类型,可以通过#{} 和 ${}以任意的名称获取参数值( ${} 需要加单引号)
<select id="findUserByName" resultType="com.jd.wds.pojo.User">
select * from user where name = '${name}'
</select>
(2)mapper接口方法的参数为多个时,以两种方式存储: ① 以0,1…为键,以参数为值; ② 以param1,param2为键,以参数为值; 此时只需要使用{arg0}或{param1}的形式访问值即可( ${}需要加单引号)
<select id="checkLogin" resultType="com.jd.wds.pojo.User">
select * from user where username=#{0} and password=#{1}
</select>
(3)mapper接口方法的参数为多个时,可以将这些参数手动放在一个map集合中存储,只需要通过#{} 和 ${}以键的形式访问值即可( ${}需要加单引号)
<select id="checkLoginByMap" resultType="com.jd.wds.pojo.User">
select * from user where username = '${username}' and password = '${password}'
</select>
@Test
public void checkLoginByMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper parameterMapper = sqlSession.getMapper(ParameterMapper.class);
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("username","小张");
hashMap.put("password","2356");
User user = parameterMapper.checkLoginByMap(hashMap);
System.out.println(user);
}
(4)mapper接口方法的参数是实体类型的参数,只需要通过#{} 或 ${}的方式访问属性值即可( ${}需要加单引号)
<insert id="insertUser" >
insert into user values(null,'${username}','${password}','${age}','${email}')
</insert>
(5)使用@Param注解命名参数,此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储: ① 以@param注解的值为键,以参数为值; ② 以param1,param2…为键,以参数为值; 此时只需要使用{arg0}或{param1}的形式访问值即可( ${}需要加单引号)
User checkLoginByParam(@Param("username")String username,@Param("password") String password);
<select id="checkLoginByParam" resultType="com.jd.wds.pojo.User">
select * from user where username = #{param1} and password = #{param2}
</select>
|