1.mybatis
1.mapper接口开发
mapper接口+mapper.xml
public interface StudentMapper {
List<Student> getAllStus();
}
<?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.ujiuye.mybatis.mapper.StudentMapper">
<resultMap id="StudentResultMap" type="Student">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<collection property="courses" ofType="Course">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</collection>
</resultMap>
<!--# 查询所有学生所选的所有课程-->
<select id="getAllStus" resultMap="StudentResultMap">
SELECT * FROM t_stu s,t_stu_course sc,t_course c WHERE s.`sid`=sc.`sid` AND c.`cid`=sc.`cid`
</select>
</mapper>
2.slf4j+logback日志
- 1.导入依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- 2.导入logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--禁止logback默认显示的日志信息-->
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<!--定义一个带颜色的控制台输出日志PATTERN-->
<property name="CONSOLE_LOG_PATTERN"
value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %highlight(%-5level) 进程: %boldYellow(%thread) 类: %boldGreen(%logger) 信息: %msg%n"/>
<!--定义一个不带颜色的文件日志输出格式,因为文件不能带颜色-->
<property name="ERRINFOFILE_LOG_PATTERN" value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %-5level 进程: %thread 类: %logger 信息: %msg%n"/>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
${CONSOLE_LOG_PATTERN}
</pattern>
</layout>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
</root>
<logger name="com.ujiuye.mybatis.mapper" level="debug"/>
</configuration>
-
3.在测试类加@slf4j
-
4.使用
@Slf4j
public class App {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws Exception{
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testGetDept() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = deptMapper.getDeptById(1);
log.info("{}",dept);
}
}
3.进阶内容
多参数问题 | @param |
---|---|
${} 和#{} | sql片段 || 数据 |
动态sql | if、set、where、foreach |
关联查询 | association(关联单个对象)、collection(关联集合对象) |
延迟加载 | “lazyLoadingEnabled” |
缓存机制 | cache 自动开启 |
配置第三方数据源 | public class DataSourceConfig extends UnpooledDataSourceFactory { public DataSourceConfig() { this.dataSource=new DruidDataSource(); } } |
4.开源插件
1.pageHelper(分页)
-
导入maven依赖
<!--pageHelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>
-
在mybatis.xml中配置
<!--分页插件--> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 参数合理化 --> <property name="reasonable" value="true"/> </plugin>
-
在类中使用
//测试pageHepler @Test public void testPageHepler() throws Exception{ //模拟前台参数:当前页,页面显示数量 Integer pageNumber = 2; Integer paegSize =2 ; PageHelper.startPage(pageNumber,paegSize); SqlSession sqlSession = sqlSessionFactory.openSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); List<Emp> list = mapper.getEmps(); PageInfo<Emp> pageInfo = new PageInfo<>(list); //查看第二页数据 log.info("{}",pageInfo.getList()); }
2.通用mapper(单表操作)
-
导入maven依赖
<!--通用mapper--> <dependency> <groupId>com.github.abel533</groupId> <artifactId>mapper</artifactId> <version>2.3.4</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency>
-
在mybatis.xml中配置(必须配置在pagehelper下面)
<!--mapper拦截器--> <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"> <!--通用Mapper接口 --> <property name="mappers" value="com.github.abel533.mapper.Mapper" /> </plugin>
-
编写自己的mapper接口
public interface DogMapper extends Mapper<Dog> { }
-
在mybatis.xml关联mapper
<!--关联mapper--> <mapper class="com.ujiuye.mybatis.mapper.DogMapper"/>
-
在类中使用
//测试通用mapper @Test public void testCommonMapper() throws Exception{ SqlSession sqlSession = sqlSessionFactory.openSession(); DogMapper mapper = sqlSession.getMapper(DogMapper.class); //查询所有 List<Dog> list = mapper.select(new Dog()); log.info("{}",list); //查询单个 Dog dog = mapper.selectByPrimaryKey(1); log.info("{}",dog); //增 Dog dog1 = new Dog(); dog1.setName("藏獒"); dog1.setAge(5); int i = mapper.insertSelective(dog1); log.info("{}",i); //删 int i1 = mapper.deleteByPrimaryKey(2); log.info("{}",i1); //改 Dog dog2 = new Dog(); dog2.setName("汪汪"); dog2.setAge(1); dog2.setId(1); int i2 = mapper.updateByPrimaryKeySelective(dog2); log.info("{}",i2); //提交事务关闭资源 sqlSession.commit(); sqlSession.close(); }