mybatis 的十分详细的入门教程第三弹
一点心得
有道云笔记详细版
http://note.youdao.com/noteshare?id=f8227cf5f186b82434d182e757af7aa7
domain使用包装类型
maven junit的这个标签代表只能在maven测试资源内使用
[外链图片转存失败(img-gmYD3foC-1564972055361)(C:\Users\print\AppData\Roaming\Typora\typora-user-images\1564795343416.png)]
maven项目的resource xml文件只有放到resouces里才能被编译
或者pom配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
复习
创建maven项目
数据库
domain
mapper.xml
核心xml
导入核心包
数据库驱动包
测试包
测试
lamda报错的话配置jdk1.8的插件
<!--配置javajdk版本为1.8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
domain
mapper接口
mapper.xml
扩展
修改官方源码
扩展哪些
domain+mapper.java+mapper.xml service controller+jsp自动生成
crud:save remove update loadById loadAll
domain:toString 不要加T
mybatis拦截器
了解即可
begin
实现Interceptor接口
覆写方法
@Intercepts(
@Signature(
/*拦截query*/
type = Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
)
)
public class MyInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
Method method = invocation.getMethod();
System.out.println(method);
Object[] args = invocation.getArgs();
System.out.println(args);
Object target = invocation.getTarget();
System.err.println(target);
//执行方法
Object proceed = invocation.proceed();
return proceed;
}
@Override
public Object plugin(Object o) {
return Plugin.wrap(o, this);
}
@Override
public void setProperties(Properties properties) {
//获取参数
String helloq = properties.getProperty("helloq");
System.err.println(helloq);
}
}
在核心xml里引入我们实现的拦截器
根据当前拦截器上面的` 注解进行判断
被拦截执行intercept()方法
细节
两种常用拦截方式
update
query
mybatis分页插件(重要)
引入maven
mybatispagehelper 5.0.0
<!-- mybatis的分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
核心xml配置插件
<!--分页插件路径-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
设置参数
PageHelper.startPage(2, 2);
//第几页 每页数据,
返回一个Page对象继承自ArrayList
/**
* Mybatis - 分页对象
*
* @author liuzh/abel533/isea533
* @version 3.6.0
* 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
*/
public class Page<E> extends ArrayList<E> {
private static final long serialVersionUID = 1L;
/**
* 页码,从1开始
*/
private int pageNum;
/**
* 页面大小
*/
private int pageSize;
/**
* 起始行
*/
private int startRow;
/**
* 末行
*/
private int endRow;
/**
* 总数
*/
private long total;
/**
* 总页数
*/
private int pages;
/**
可以获取分页数据
ssm集成
spring
spring-aop-4.1.2.RELEASE.jar
spring-aspects-4.1.2.RELEASE.jar
spring-beans-4.1.2.RELEASE.jar
spring-context-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
spring-expression-4.1.2.RELEASE.jar
spring-jdbc-4.1.2.RELEASE.jar
spring-orm-4.1.2.RELEASE.jar
spring-test-4.1.2.RELEASE.jar
spring-tx-4.1.2.RELEASE.jar
spring-web-4.1.2.RELEASE.jar
spring-webmvc-4.1.2.RELEASE.jar
spring依赖包
连接池与日志
com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.commons.pool-1.5.3.jar
aopalliance&&aspectj.weaver
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
springmvc
返回json数据jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.0.jar
jackson-databind-2.5.0.jar
上传下载
com.springsource.org.apache.commons.fileupload-1.2.0.jar
com.springsource.org.apache.commons.io-1.4.0.jar
mybatis
核心包
mybatis-3.2.1.jar
##### 依赖包
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
slf4j-api-1.7.2.jar
slf4j-log4j12-1.7.2.jar
~~ log4j-1.2.17.jar spring里也有这个jar,会冲突,需 删除 ~~
数据库依赖包
mysql-connector-java-5.1.26-bin.jar
mybatis与spring集成包
mybatis-spring-1.2.0.jar
applicathonContext.xml
创建与读取jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=123456
配置dataSource
<!--引入数据库配置文件并在连接池bean中引用-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 连接池-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
配置mybatis的sqlSessionFactory
<!--配置mybatis的sqlSessionFactory-->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置连接池-->
<property name="dataSource" ref="dataSource"/>
<!--配置别名的包 有多个用逗号隔开-->
<property name="typeAl|iasesPackage" value="cn.itsource.domain"/>
<!--扫描mapper包下的所有xml-->
<property name="mapperLocations" value="classpath:cn/itsource/mapper/*.xml"/>
</bean>
配置maopper对象
<!--笨办法扫描单个-->
<!--
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="mapperFactoryBean">
<property name="sqlSessionFactory" ref="SqlSessionFactory"/>
<property name="mapperInterface" value="cn.itsource.mapper.EmployeeMapper"/>
</bean>
-->
<!--一劳永逸扫描mapper包-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itsource.mapper"/>
</bean>
service测试即可
事务
<!--事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务注解开启-->
<tx:annotation-driven/>
@Service
@Transactional
public class EmployeeServicceImpl implements EmployeeService {
@Autowired
private EmployeeMapper mapper;
@Override
//只读 事务传播机制
@Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
public List<Employee> findAll() {
return mapper.findAll();
}
spring.xml全部配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<context:component-scan base-package="cn.itsource.service"/>
<!--引入数据库配置文件并在连接池bean中引用-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置mybatis的sqlSessionFactory-->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置连接池-->
<property name="dataSource" ref="dataSource"/>
<!--配置别名的包 有多个用逗号隔开-->
<property name="typeAliasesPackage" value="cn.itsource.domain"/>
<!--扫描mapper包下的所有xml-->
<property name="mapperLocations" value="classpath:cn/itsource/mapper/*.xml"/>
</bean>
<!--笨办法扫描单个-->
<!--<bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="mapperFactoryBean">
<property name="sqlSessionFactory" ref="SqlSessionFactory"/>
<property name="mapperInterface" value="cn.itsource.mapper.EmployeeMapper"/>
</bean>-->
<!--一劳永逸扫描mapper包-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itsource.mapper"/>
</bean>
<!--事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务注解开启-->
<tx:annotation-driven/>
</beans>
七种事务传播机制
REQUIRED(默认):支持使用当前事务,如果当前事务不存在,创建一个新事务。
SUPPORTS:支持使用当前事务,如果当前事务不存在,则不使用事务。
MANDATORY:中文翻译为强制,支持使用当前事务,如果当前事务不存在,则抛出Exception。
REQUIRES_NEW:创建一个新事务,如果当前事务存在,把当前事务挂起。
NOT_SUPPORTED:无事务执行,如果当前事务存在,把当前事务挂起。
NEVER:无事务执行,如果当前有事务则抛出Exception。
NESTED:嵌套事务,如果当前事务存在,那么在嵌套的事务中执行。如果当前事务不存在,则表现跟REQUIRED一样。
---------------------
作者:青鱼入云
来源:CSDN
原文:https://blog.csdn.net/u011305680/article/details/79206408
版权声明:本文为博主原创文章,转载请附上博文链接!
springmvc
applicathonContext-mvc.xml
扫描controller
<!--扫描controller-->
<context:component-scan base-package="cn.itsource.controller"/>
<!--静态资源放行-->
<mvc:default-servlet-handler/>
<!--mvc注解支持-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
mvc全配置
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描controller-->
<context:component-scan base-package="cn.itsource.controller"/>
<!--静态资源放行-->
<mvc:default-servlet-handler/>
<!--mvc注解支持-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
web.xml
配置核心控制器
<!--核心控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置读取springmvc-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicathonContext-mvc.xml</param-value>
</init-param>
<!--让springmvc随着tomcat启动而启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
读取spring
<!--读取spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicathonContext.xml</param-value>
</context-param>
配置监听器用来启动spring
<!--配置监听器 启动spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
过滤器解决中文乱码
<!--过滤器解决中文乱码-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml全配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置监听器 启动spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--读取spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicathonContext.xml</param-value>
</context-param>
<!--核心控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置读取springmvc-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicathonContext-mvc.xml</param-value>
</init-param>
<!--让springmvc随着tomcat启动而启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--过滤器解决中文乱码-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>