2017.12.20 MyBatis
来源:互联网 发布:视频转换格式软件 编辑:程序博客网 时间:2024/06/15 10:40
一、MyBatis
1.解决问题(需要完成的配置):
1)实体映射(字段与属性的映射)
通过domain下的属性类(@Data注解和lombok的依赖、插件)和resources下的mapper.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.test.server.repository.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.test.server.domain.City"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="province_id" jdbcType="INTEGER" property="provinceId"/> <result column="city_name" jdbcType="VARCHAR" property="cityName"/> <result column="description" jdbcType="VARCHAR" property="description"/></resultMap><sql id="Base_Column_List"> id, province_id,city_name,description</sql><select id = "getAll" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> FROM city</select></mapper>
要注意 XML 头部的声明,用来验证 XML 文档正确性。
2)SQL绑定(将SQL语句绑定到接口上)
repository.mapper下的mapper作为接口(@Repository),并通过Repository类来调用(@Repository)
3)执行环境(运行时的环境)
①数据源交给spring
在resouces下的.properties文件中配置
#mybatis.config-location=mybatis.xmlmybatis.mapperLocations=classpath:mapper/*.xmlspring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC&allowMultiQueries=truespring.datasource.username=xxxxspring.datasource.password=xxxx
数据库、账号、密码
②其他配置
mybatis.xml完成其他配置
2.SqlSession和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="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog">select * from Blog where id = #{id} </select></mapper>
在命名空间“org.mybatis.example.BlogMapper”中定义了一个名为“selectBlog”的映射语句,这样它就允许你使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句,就像上面的例子中做的那样:
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
进一步可以完成如下使用:
BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);
结合spring boot将repository下的mapper用注解@Repository注册为Bean,然后在使用时用@Autowired注入,直接调用实例。
因此在使用的时候可以直接:
@Autowiredprivate CityMapper cityMapper;List<City> cityList = cityMapper.getAll();
3.所以,在搭建时,resources下的文件:
①.properties文件把数据源交给spring处理。
②mapper.xml中完成映射
命名空间(namespace)就是之后的Repository下的Mapper接口
<mapper namespace="com.test.server.repository.mapper.UserMapper">
resultMap和domain下的属性类完成映射
sql的id和Repository下的Mapper接口的方法完成映射
③可以创建mybatis.xml完成一起其他的配置。
项目中需要一个属性的类和一个接口的类。
4.SqlSessionFactory
可以自己设置SqlSessionFactory,SqlSessionFactory产生SqlSession完成数据会话。
@Bean(name = "sqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setConfigLocation(new ClassPathResource(MYBATIS_CONFIG_PATH)); factoryBean.setTypeAliasesPackage(DOMAIN_PATH); factoryBean.setMapperLocations(getResources(MAPPER_PATHS)); return factoryBean.getObject();}
5.使用
①基本操作
<select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id}</select><insert id="insertAuthor"> insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio})</insert><update id="updateAuthor"> update Author set username = #{username}, password = #{password}, email = #{email}, bio = #{bio} where id = #{id}</update><delete id="deleteAuthor"> delete from Author where id = #{id}</delete>
插入时用foreach可以完成多条插入
②sql标签
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化. 比如:
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
这个 SQL 片段可以被包含在其他语句中,例如:
<select id="selectUsers" resultType="map"> select <include refid="userColumns"><property name="alias" value="t1"/></include>, <include refid="userColumns"><property name="alias" value="t2"/></include> from some_table t1 cross join some_table t2</select>
用include、refid = “”、/include插入
6.动态sql
①if
<if test="title != null"> AND title like #{title}</if>
②where、set标签
只有在where /where之间有条件 where才会有,不然会存在如下问题:
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE <if test="state != null"> state = #{state} </if> <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if></select>SELECT * FROM BLOGWHERE
set标签同理
③trim
<trim prefix="WHERE" prefixOverrides="AND |OR "> ... </trim>
前缀加入WHERE并覆盖AND或OR
http://www.mybatis.org/mybatis-3/zh/getting-started.html
- 2017.12.20 MyBatis
- myBatis逆向工程(20)
- MyBatis
- MyBatis
- Mybatis
- myBatis
- mybatis
- MyBatis
- mybatis
- Mybatis
- MyBatis
- Mybatis
- mybatis
- MyBatis
- MyBatis
- mybatis
- MyBatis
- mybatis
- win10安装Centos7
- Linux下忘记root密码重置过程笔记
- java基础---(2)Java中token的使用详解
- 购物车
- listView自动加载
- 2017.12.20 MyBatis
- 设计模式——策略模式
- sql性能优化(利用merge)
- OC 中New和alloc/init的区别
- java 利用BufferedWriter 读写文件需要flush 缓存
- cookie 和session 的区别详解
- 信息系统安全等级保护申请流程
- spriing boot 启动报错:Cannot determine embedded database driver class for database type NONE
- 谁动了我的特征?——sklearn特征转换行为全记录