zoukankan      html  css  js  c++  java
  • ssm整合通用mapper

    1.加入通用mapper依赖

              <!--通用Mapper -->
    		<dependency>
    			<groupId>tk.mybatis</groupId>
    			<artifactId>mapper</artifactId>
    			<version>4.1.4</version>
    		</dependency>
    

      

    完整的pom.xml文件

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.qingfeng</groupId>
    	<artifactId>SSM-Mapper</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>war</packaging>
    
    	<properties>
    		<spring.version>5.0.5.RELEASE</spring.version>
    		<mybatis.version>3.4.5</mybatis.version>
    		<mybatis.spring.version>1.3.1</mybatis.spring.version>
    		<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
    		<junit.version>4.12</junit.version>
    		<jackson.version>2.9.4</jackson.version>
    		<druid.version>1.1.0</druid.version>
    		<mysql-connector-java>5.1.30</mysql-connector-java>
    		<spring.security.version>5.0.5.RELEASE</spring.security.version>
    	</properties>
    
    	<dependencies>
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-aspects</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jms</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context-support</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    
    		<!-- 单元测试 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>${junit.version}</version>
    		</dependency>
    
    		<!-- Mybatis -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>${mybatis.version}</version>
    		</dependency>
    		<!-- MyBatis整合Spring -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>${mybatis.spring.version}</version>
    		</dependency>
    		<!-- Mybatis的分页插件 -->
    		<dependency>
    			<groupId>com.github.miemiedev</groupId>
    			<artifactId>mybatis-paginator</artifactId>
    			<version>${mybatis.paginator.version}</version>
    		</dependency>
    
    		<!-- jackson -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-core</artifactId>
    			<version>${jackson.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>${jackson.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-annotations</artifactId>
    			<version>${jackson.version}</version>
    		</dependency>
    
    
    		<!--通用Mapper -->
    		<dependency>
    			<groupId>tk.mybatis</groupId>
    			<artifactId>mapper</artifactId>
    			<version>4.1.4</version>
    		</dependency>
    
    
    		<!-- 数据源/数据库连接池 -->
    		<!-- druid -->
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>${druid.version}</version>
    		</dependency>
    
    		<!-- MySQL数据库连接驱动 -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>${mysql-connector-java}</version>
    		</dependency>
    
    		<!-- lombok -->
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<version>1.16.12</version>
    		</dependency>
    
    		<!--引入Servlet支持 -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    
    
    	</dependencies>
    
    
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<!-- 指定端口 -->
    					<port>9002</port>
    					<!-- 请求路径 -->
    					<path>/</path>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    
    
    </project>
    

      

    和通用 Mapper 以前版本一样,可以直接使用 tk.mybatis 提供的  tk.mybatis.spring.mapper.MapperScannerConfigurer  进行配置,这个配置和
    MyBatis 官方提供的  org.mybatis.spring.mapper.MapperScannerConfigurer  区别只是第一层的包名, tk  和  org 。所以使用这种方式时,如果你项目已经使用  org.  进行了配置,只需要改成  tk.  即可。
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--加载mybatis的配置文件-->
            <property name="configLocation" value="classpath:mybatis-config.xml" />
            <!-- 指定数据源,值为以上配置的数据源 -->
            <property name="dataSource" ref="dataSource" />
            <!--指定mapper.xml映射文件的位置-->
            <property name="mapperLocations" value="classpath:mapper/*.xml" /> 
        </bean>
    

      

    完整的

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
            <property name="locations">
                <list>
                    <value>classpath:db.properties</value>
                </list>
            </property>
        </bean>
    
    
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
            <property name="driverClassName" value="${db.driverClassName}" />
            <property name="url" value="${db.url}" />
            <property name="username" value="${db.username}" />
            <property name="password" value="${db.password}" />
            <property name="initialSize" value="3" />
            <property name="minIdle" value="3" />
            <property name="maxActive" value="20" />
            <property name="maxWait" value="60000" />
            <property name="filters" value="stat,wall" />
        </bean>
    
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--加载mybatis的配置文件-->
            <property name="configLocation" value="classpath:mybatis-config.xml" />
            <!-- 指定数据源,值为以上配置的数据源 -->
            <property name="dataSource" ref="dataSource" />
            <!--指定mapper.xml映射文件的位置-->
            <property name="mapperLocations" value="classpath:mapper/*.xml" /> 
        </bean>
    
        <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 指定接口文件的位置 -->
            <property name="basePackage" value="com.qingfeng.dao" />
            <!--指定sqlSessionFactory,值为以上配置的sqlSessionFactory-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>
    
        <!-- tx事务 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        <!-- 启动注解驱动 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
    
        <!-- druid -->
        <!--监控数据相关的-->
        <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
            <!--当时间超过3000毫秒,这就是个慢sql,需要我们去处理-->
            <property name="slowSqlMillis" value="3000" />
            <!--发现了慢SQL,可以以log的日志计录下来-->
            <property name="logSlowSql" value="true" />
            <property name="mergeSql" value="true" />
        </bean>
    
        <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
            <!--指定监控的db是mysql-->
            <property name="dbType" value="mysql" />
        </bean>
    
    </beans>
    

      

    实体类映射

    1.表名可以使用@Table(name = "tableName")进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.
    
    2.字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.
    
    3.可以使用@Column(name = "fieldName")指定不符合第3条规则的字段名
    
    4.使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用.
    
    5.建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.
    
    6.默认情况下,实体类中如果不存在包含@Id注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).
    
    7.实体类可以继承使用,可以参考测试代码中的com.github.abel533.model.UserLogin2类.
    
    8.由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型.

      

    package com.qingfeng.pojo;
    
    import java.io.Serializable;
    import java.util.Date;
    
    import javax.persistence.Id;
    import javax.persistence.Table;
    /**
     * 用户实体类
     * @author Administrator
     *
     */
    @Table(name="tb_user")
    public class TBUser implements Serializable{
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -1223633684656774146L;
    
    	@Id
    	private Long id;//id
    
    	private String username;//用户名
    
    	private String password;//密码,加密存储
    
    	private String phone;//注册手机号
    
    	private String email;//注册邮箱
    
    	private Date created;//创建时间
    
    	private String name;//真实姓名
    
    	private String status;//使用状态(1正常 0非正常)
    
    	private String qq;//QQ号码
    
    	public Long getId() {
    		return id;
    	}
    
    	public void setId(Long id) {
    		this.id = id;
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getPhone() {
    		return phone;
    	}
    
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getCreated() {
    		return created;
    	}
    
    	public void setCreated(Date created) {
    		this.created = created;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getStatus() {
    		return status;
    	}
    
    	public void setStatus(String status) {
    		this.status = status;
    	}
    
    	public String getQq() {
    		return qq;
    	}
    
    	public void setQq(String qq) {
    		this.qq = qq;
    	}
    
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", username=" + username + ", password=" + password + ", phone=" + phone + ", email="
    				+ email + ", created=" + created + ", name=" + name + ", status=" + status + ", qq=" + qq + "]";
    	}
    
    	
    
    }
    

      

    创建Mapper接口

    package com.qingfeng.dao;
    
    import com.qingfeng.pojo.TBUser;
    
    import tk.mybatis.mapper.common.Mapper;
    /**
     * 继承通用Mapper
     * @author Administrator
     *
     */
    public interface UserMapper extends Mapper<TBUser> {
    
    }
    

      这里继承了   tk.mybatis.mapper.common.Mapper  接口,在接口上指定了泛型类型  Brand 。当你继承了  Mapper  接口后,此时就已经有了针对  Brand  的大量方法

    测试:

    package com.qingfeng;
    
    import java.util.List;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.qingfeng.dao.UserMapper;
    import com.qingfeng.pojo.TBUser;
    
    
    
    public class TestUserMapper {
    
    	private AbstractApplicationContext ac;
    	private UserMapper userMapper; 
    
    	
    	
    	@Before
    	public void doBefore() {
    		
    		ac = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
    		userMapper = ac.getBean("userMapper",
    				UserMapper.class);
    	}
    	
    	@After
    	public void doAfter() {
    		ac.close();
    	}
    	
    	
    	@Test
    	public void testUser() {
    		List<TBUser> selectAll = userMapper.selectAll();
    		for(TBUser user:selectAll) {
    			System.out.println(user);
    		}
    	}
    }   

      结果:

    User [id=1, username=admin, password=123456, phone=13699996666, email=1412330@qq.com, created=Thu Jul 30 23:23:29 CST 2020, name=qq, status=1, qq=1412330]
    User [id=2, username=spring, password=$2a$10$rIxa8dDL8F8Bf.TeC5rOeev96e0wTo0FIuLmtdJ6T/a8CptHlAlga, phone=13698566966, email=123456@qq.com, created=Thu Jul 30 02:16:36 CST 2020, name=spring, status=1, qq=123456]
    

      

  • 相关阅读:
    Cayley's Tree Formula & Prufer's Method
    POJ 2262:Goldbach's Conjecture
    The Sieve of Eratosthenes (素数筛选法)
    POJ 2244:Eeny Meeny Moo(稍加变形的约瑟夫问题)
    POJ 1595:Prime Cuts
    iframe标签的使用
    js笔记
    Asp.Net知识点
    Reapte控件的使用
    浮躁十年
  • 原文地址:https://www.cnblogs.com/Amywangqing/p/13641787.html
Copyright © 2011-2022 走看看