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>
<!--指定jdbc.properties文件的位置
jdbc.properties的位置在classpath中。
.class文件所在的根目录中
-->
<properties resource="jdbc.properties" />
<!--配置mybatis日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--注册分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
<!--
default:指定当前项目执行时,使用的环境信息,
default的值是environment的id值。
-->
<environments default="mysql">
<!--
一个environment表示一个数据库的连接信息
id:自定义的环境名称,唯一值
-->
<environment id="mysql">
<!--
transactionManager:指定事务
type:指定处理事务的类型
JDBC:表示是jdbc中的Connection指定commit,rollback处理事务提交,回滚。
MANAGED:由容器处理事务。 下午将容器spring
-->
<transactionManager type="JDBC"></transactionManager>
<!--
dataSource表示数据源(连接数据库的Connection)
type:数据源类型
1)POOLED:使用数据库连接池 PooledDataSource ,线程安全的连接池
2)UNPOOLED: 不使用连接池 UnPooledDataSource
3) JNDI : 命名和目录服务
-->
<dataSource type="POOLED">
<!--使用属性配置文件的语法 ${key}-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--
一个environment表示一个数据库的连接信息
id:自定义的环境名称,唯一值
-->
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!--指定mapper文件的位置-->
<mappers>
<!--
<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
-->
<!--
package:
name:包名, 框架是说把这个包下面的所有mapper文件一起都能找到。
使用package指定mapper文件位置的要求:
1.mapper文件名必须和Dao接口名一样
2.mapper文件必须和Dao接口在同一目录
-->
<package name="com.bjpowernode.dao" />
<!--<package name="com.bjpowernode.user.dao" />-->
</mappers>
</configuration>
同级目录下定义jdbc.properites
文件
#数据库的属性配置文件, 把数据库有关信息,定义在一个单独的文件中
#格式 key=value , key是自定义的名称
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.password=123
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/springdb
mysql.username=root;
mysql.password=123
二、注解
mybatis 的注解,主要是用于替换映射文件。而映射文件中无非存放着增、删、改、查的 SQL 映射标签。所以, mybatis 注解,就是要替换映射文件中的 SQL 标签。
- @Insert
- @Delete
- @Update
- @Select
他们 value 属性用于指定要执行的 sql 语句,value可以省略
在主配置文件中通过package的方式指定带注解的接口
//@Mapper: 当前接口就相当于mapper配置文件
@Mapper
public interface StudentDao {
@Insert("insert into student values(#{id},#{name},#{email},#{age})")
int insertStudent(Student student);
@Update("update student set name=#{name},email=#{email},age=#{age} where id=#{id} ")
int updateStudent(Student student);
@Delete("delete from student where id =#{stuid}")
int deleteStudentById(Integer id);
@Select("select id,name,email,age from student where id=#{stuid}")
Student selectStudentById(Integer id);
}
三、 PageHelper通用分页插件
- maven坐标:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
- 主配置文件中加入 plugin 配置
在<environments>
之前加入:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
- PageHelper 对象
查询语句之前调用PageHelper.startPage
静态方法。
在需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage
静态方法即可,紧跟在这个
方法后的第一个 MyBatis 查询方法会被进行分页。
@Test
public void testSelect() throws IOException {
//获取第 1 页, 3 条内容
PageHelper.startPage(1,3);
List<Student> studentList = studentDao.selectStudents();
studentList.forEach( stu -> System.out.println(stu));
}
三、 PageHelper 4.1.1 使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.1</version>
</dependency>
@Configuration
public class MybatisConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
//添加配置,也可以指定文件路径
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
p.setProperty("dialect", "mysql");
pageHelper.setProperties(p);
return pageHelper;
}
}
SqlSessionFactory 中增加对应拦截器:
@Bean(name = DataSourceConstants.WHBIGDATA_SQL_SESSION_FACTORY)
@DependsOn("pageHelper")
public SqlSessionFactory sqlSessionFactory(@Qualifier(DATA_SOURCE_NAME) DataSource dataSource,
PageHelper pageHelper) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION)
);
return sqlSessionFactoryBean.getObject();
}
在查询语句前使用 PageHelper.startPage()
即可
@Test
public void Test1() {
PageHelper.startPage(2, 200);
List<Map<String, Object>> maps = whBigdataInteractiveVemMapper.searchCurrentNotPushVem(EnumCityType.WH_FLAG);
PageInfo<Map<String, Object>> info = new PageInfo<>(maps);
System.out.println(info.getTotal());
}