mybatis 的十分详细的入门教程第三弹

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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值