容易练习使用tk/mybatis/mapper/common/Mapper

项目结构

day02MyBatis/
├── day02MyBatis.iml
├── pom.xml
└── src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── zhang/
│   │           ├── entity/
│   │           │   ├── Book.java
│   │           │   └── BookType.java
│   │           ├── mapper/
│   │           │   ├── BookMapper.java
│   │           │   ├── BookMapper.xml
│   │           │   ├── BookTypeMapper.java
│   │           │   └── BookTypeMapper.xml
│   │           └── service/
│   │               └── impl/
│   │                   └── BookServiceImpl.java
│   └── resources/
│       ├── SqlMapConfig.xml
│       ├── applicationContext.xml
│       ├── db.properties
│       ├── log4j.properties
│       └── generator/
│           ├── generatorConfig.xml
│           └── logback.xml
└── test/
└── java/
└── com/
└── zhang/
└── Test.java

该项目是一个基于Spring+MyBatis的 书籍信息管理demo ,主要实现书籍数据的查询功能,使用tk.mybatis.mapper.common.Mapper减少代码量,具体特点如下:

核心功能

  1. 数据库交互

    • 通过MyBatis实现与MySQL数据库的连接与操作,配置文件为 db.properties
    • 提供书籍信息的查询功能,通过 getBookList 方法获取全部书籍列表
  2. 技术架构

    • Spring框架 :实现依赖注入和事务管理,配置文件为 applicationContext.xml
    • MyBatis :提供ORM映射,通过通用Mapper简化CRUD操作,实体类为 Book.java
    • 分页支持 :集成PageHelper插件实现分页查询
  3. 代码结构

    • 采用经典的分层架构:Entity(实体层) → Mapper(数据访问层) → Service(业务逻辑层)
    • 测试类 Test.java 验证查询功能

关键实现

  • 通过通用Mapper接口 BookMapper 继承基础CRUD方法
  • 业务层实现类 BookServiceImpl 调用MyBatis查询接口
  • Spring事务管理配置确保数据操作的一致性

实体类

@Table(name = "book")
public class Book
{
@Id
@GeneratedValue(generator = "JDBC")
private Integer bookid;
private String bookname;
private Double price;
private Date pubtime;
private String author;
private Integer typeid;
/*忽略get set*/
}
@Table(name = "booktype")
public class BookType
{
@Id
@GeneratedValue(generator = "JDBC")
private Integer typeid;
private String typename;
/*忽略get set*/
}

mapper.java

package com.zhang.mapper;
import com.zhang.entity.Book;
import tk.mybatis.mapper.common.Mapper;
public interface BookMapper extends Mapper<
Book> {
}
package com.zhang.mapper;
import com.zhang.entity.BookType;
import tk.mybatis.mapper.common.Mapper;
public interface BookTypeMapper extends Mapper<
BookType> {
}

mapper.xml

<?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.zhang.mapper.BookMapper" >
        <resultMap id="BaseResultMap" type="com.zhang.entity.Book" >
        <!--
        WARNING - @mbg.generated
        -->
        <id column="bookid" property="bookid" jdbcType="INTEGER" />
        <result column="bookname" property="bookname" jdbcType="VARCHAR" />
        <result column="price" property="price" jdbcType="DOUBLE" />
        <result column="pubtime" property="pubtime" jdbcType="DATE" />
        <result column="author" property="author" jdbcType="VARCHAR" />
        <result column="typeid" property="typeid" jdbcType="INTEGER" />
      </resultMap>
    </mapper>
    <?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.zhang.mapper.BookTypeMapper" >
            <resultMap id="BaseResultMap" type="com.zhang.entity.BookType" >
            <!--
            WARNING - @mbg.generated
            -->
            <id column="typeid" property="typeid" jdbcType="INTEGER" />
            <result column="typename" property="typename" jdbcType="VARCHAR" />
          </resultMap>
        </mapper>

service

import com.zhang.entity.Book;
import java.util.List;
public interface BookService {
List<
Book> getBookList();
}
import com.zhang.entity.Book;
import com.zhang.mapper.BookMapper;
import com.zhang.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookServiceImpl
implements BookService {
@Autowired
public BookMapper bookMapper;
@Override
public List<
Book> getBookList() {
return bookMapper.selectAll();
}
}

测试类

package com.zhang;
import com.zhang.entity.Book;
import com.zhang.service.BookService;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
//学注解点进去看看
@RunWith(SpringJUnit4ClassRunner.class)
//启动spring集成的JUnit测试框架
////加载spring的配置文件
@ContextConfiguration(locations = {
"classpath:applicationContext.xml"
})
public class Test
{
@Autowired
private BookService bookService;
@org.junit.Test
public void getEmpList(){
List<
Book> books = bookService.getBookList();
if (null!=books){
for (Book book : books) {
System.out.println(book);
}
}
}
}

配置文件

generatorConfig.xml 生成实体类和mapper
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
  <!-- 引用外部的数据库的配置属性-->
    <properties resource="db.properties"/>
    <!--mybatis运行环境-->
        <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!--通用mapper的配置-->
            <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
          </plugin>
          <!--数据库数据-->
              <jdbcConnection driverClass="${jdbc.driver}"
              connectionURL="${jdbc.url}"
              userId="${jdbc.username}"
              password="${jdbc.password}">
          </jdbcConnection>
          <!--实体类位置-->
              <javaModelGenerator targetPackage="com.zhang.entity"
              targetProject="src/main/java"/>
            <!--XXXMapper.xml-->
              <!-- ??-->
                  <sqlMapGenerator targetPackage="mapper"
                  targetProject="src/main/java/com/zhang"/>
                <!--XXXMapper-->
                    <javaClientGenerator targetPackage="com.zhang.mapper"
                    targetProject="src/main/java"
                    type="XMLMAPPER"/>
                    <table tableName="Book" domainObjectName="Book">
                    <!-- 指定表中主键的名字,所以建表的时候要有主键-->
                      <generatedKey column="bookid" sqlStatement="JDBC"/>
                    </table>
                      <table tableName="BookType" domainObjectName="BookType">
                      <generatedKey column="typeid" sqlStatement="JDBC"/>
                    </table>
                  </context>
                </generatorConfiguration>
logback.xml 日志配置

这里只是到控制台,没配置到文件

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <!--输出日志到控制台-->
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--负责把事件转成字符串,格式化日志信息的输出-->
          <layout>
            <pattern>
              <!--%d是日期,%msg是日志消息%n换行-->
                [%p]%d-%msg%n
              </pattern>
            </layout>
          </appender>
            <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>DENY</onMatch>
            </filter>
            <encoder>
              <pattern>
                [%p]%d-%msg%n
              </pattern>
            </encoder>
            <!-- 指定文件的输出位置-->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>
                  D:/logs/%d.log
                </fileNamePattern>
              </rollingPolicy>
            </appender>
              <root level="info">
            <appender-ref ref="consoleLog"></appender-ref>
            <appender-ref ref="fileLog"></appender-ref>
            </root>
          </configuration>
applicationContext.xml spring mvc的配置bean
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--改成业务层接口所在的包-->
  <
context:component-scan base-package="com.zhang.service"></context:component-scan>
<!-- 配置数据库连接池 -->
  <!-- 加载配置文件 -->
    <
      context:property-placeholder location="classpath:db.properties"/>
    <!-- 数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
      <property name="driverClassName" value="${jdbc.driver}" />
      <property name="maxActive" value="10" />
      <property name="minIdle" value="5" />
    </bean>
    <!-- 配置sqlsessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
      <property name="dataSource" ref="dataSource"></property>
        <!--修改的位置,实体类的包-->
        <property name="typeAliasesPackage" value="com.zhang.entity"></property>
          <!--修改的位置,DAO映射配置文件的包-->
          <property name="mapperLocations" value="classpath:com/zhang/mapper/*.xml"></property>
          </bean>
          <!-- 配置扫描包,加载mapper代理对象 -->
              <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
              <!--修改的位置,Mapper接口的包-->
              <property name="basePackage" value="com.zhang.mapper"></property>
              <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
              </bean>
                <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                <!-- 数据源 -->
                <property name="dataSource" ref="dataSource"></property>
                </bean>
                <!-- 通知 -->
                  <
                    tx:advice id="txAdvice" transaction-manager="transactionManager">
                  <
                  tx:attributes>
                  <!-- 传播行为 -->
                    <
                      tx:method name="save*" propagation="REQUIRED"/>
                    <
                      tx:method name="insert*" propagation="REQUIRED"/>
                    <
                      tx:method name="add*" propagation="REQUIRED"/>
                    <
                      tx:method name="create*" propagation="REQUIRED"/>
                    <
                      tx:method name="delete*" propagation="REQUIRED"/>
                    <
                      tx:method name="update*" propagation="REQUIRED"/>
                    <
                      tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
                    <
                      tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
                    <
                      tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
                  </tx:attributes>
                </tx:advice>
                <!-- 切面 -->
                  <
                  aop:config>
                  <
                    aop:advisor advice-ref="txAdvice" pointcut="execution(* com.zhang.service.*.*(..))"/>
                </aop:config>
              </beans>
db.properties 数据库连接信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1234
log4j.properties 日志信息配置
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
SqlMapConfig.xml 分页插件配置
<?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>
    <settings>
      <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <plugins>
      <!-- 配置分页插件 -->
          <plugin interceptor="com.github.pagehelper.PageInterceptor">
          <property name="reasonable" value="true"/>
        </plugin>
      </plugins>
    </configuration>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
    <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.zhang</groupId>
<artifactId>day02MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>
<name>day02MyBatis</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <jdk.version>1.7</jdk.version>
    <junit.version>4.12</junit.version>
    <spring.version>4.2.4.RELEASE</spring.version>
    <mybatis.version>3.2.8</mybatis.version>
    <mybatis.spring.version>1.2.2</mybatis.spring.version>
    <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
    <tk.mybatis.version>4.0.4</tk.mybatis.version>
    <mysql.version>8.0.33</mysql.version>
    <slf4j.version>1.6.4</slf4j.version>
    <jackson.version>2.4.2</jackson.version>
    <druid.version>1.0.9</druid.version>
    <jstl.version>1.2</jstl.version>
    <servlet-api.version>2.5</servlet-api.version>
    <jsp-api.version>2.0</jsp-api.version>
    <commons-lang3.version>3.3.2</commons-lang3.version>
    <commons-io.version>1.3.2</commons-io.version>
    <commons-net.version>3.3</commons-net.version>
    <pagehelper.version>5.1.2</pagehelper.version>
    <commons-fileupload.version>1.3.1</commons-fileupload.version>
    </properties>
    <dependencies>
      <!-- Apache工具组件 -->
        <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>${commons-net.version}</version>
        </dependency>
        <!-- Jackson Json处理工具包 -->
          <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>${jackson.version}</version>
          </dependency>
          <!-- 单元测试 -->
            <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
            </dependency>
            <!-- 日志处理 -->
              <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-log4j12</artifactId>
              <version>${slf4j.version}</version>
              </dependency>
              <!-- Mybatis框架 -->
                <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
                </dependency>
                <!--spring整合Mybatis的插件-->
                  <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis-spring</artifactId>
                  <version>${mybatis.spring.version}</version>
                  </dependency>
                  <!-- 通用Mapper -->
                    <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper</artifactId>
                    <version>${tk.mybatis.version}</version>
                    </dependency>
                    <!-- 分页插件 -->
                      <dependency>
                      <groupId>com.github.pagehelper</groupId>
                      <artifactId>pagehelper</artifactId>
                      <version>${pagehelper.version}</version>
                      </dependency>
                      <!-- MySql数据库 -->
                        <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                        </dependency>
                        <!-- 阿里巴巴连接池 -->
                          <dependency>
                          <groupId>com.alibaba</groupId>
                          <artifactId>druid</artifactId>
                          <version>${druid.version}</version>
                          </dependency>
                          <!-- Spring支持 -->
                            <!-- IOC容器 -->
                              <dependency>
                              <groupId>org.springframework</groupId>
                              <artifactId>spring-beans</artifactId>
                              <version>${spring.version}</version>
                              </dependency>
                              <!-- 扩展IOC容器,添加任务调度 邮件服务等 -->
                                <dependency>
                                <groupId>org.springframework</groupId>
                                <artifactId>spring-context</artifactId>
                                <version>${spring.version}</version>
                                </dependency>
                                <!-- spring mvc框架 -->
                                  <dependency>
                                  <groupId>org.springframework</groupId>
                                  <artifactId>spring-webmvc</artifactId>
                                  <version>${spring.version}</version>
                                  </dependency>
                                  <!-- spring context的扩展,用于mvc -->
                                    <dependency>
                                    <groupId>org.springframework</groupId>
                                    <artifactId>spring-context-support</artifactId>
                                    <version>${spring.version}</version>
                                    </dependency>
                                    <!-- spring jdbc的简单封装 -->
                                      <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-test</artifactId>
                                          <version>${spring.version}</version>
                                          </dependency>
                                          <!-- JSP相关 -->
                                            <dependency>
                                            <groupId>jstl</groupId>
                                            <artifactId>jstl</artifactId>
                                            <version>${jstl.version}</version>
                                            </dependency>
                                            <dependency>
                                            <groupId>javax.servlet</groupId>
                                            <artifactId>servlet-api</artifactId>
                                            <version>${servlet-api.version}</version>
                                            <scope>provided</scope>
                                            </dependency>
                                            <dependency>
                                            <groupId>javax.servlet</groupId>
                                            <artifactId>jsp-api</artifactId>
                                            <version>${jsp-api.version}</version>
                                            <scope>provided</scope>
                                              <exclusions>
                                                <exclusion>
                                                <artifactId>servlet-api</artifactId>
                                                <groupId>javax.servlet</groupId>
                                                </exclusion>
                                              </exclusions>
                                            </dependency>
                                            <!-- 文件上传组件 -->
                                              <dependency>
                                              <groupId>commons-fileupload</groupId>
                                              <artifactId>commons-fileupload</artifactId>
                                              <version>${commons-fileupload.version}</version>
                                                <exclusions>
                                                  <exclusion>
                                                  <artifactId>commons-io</artifactId>
                                                  <groupId>commons-io</groupId>
                                                  </exclusion>
                                                </exclusions>
                                              </dependency>
                                              <dependency>
                                              <groupId>commons-io</groupId>
                                              <artifactId>commons-io</artifactId>
                                              <version>${commons-io.version}</version>
                                              </dependency>
                                            </dependencies>
                                            <build>
                                            <finalName>booksys</finalName>
                                              <plugins>
                                                <!--tomcat的插件-->
                                                  <plugin>
                                                  <groupId>org.apache.tomcat.maven</groupId>
                                                  <artifactId>tomcat7-maven-plugin</artifactId>
                                                  <version>2.2</version>
                                                    <configuration>
                                                    <path>/</path>
                                                    <port>8080</port>
                                                    </configuration>
                                                  </plugin>
                                                  <!--maven编译的插件-->
                                                    <plugin>
                                                    <groupId>org.apache.maven.plugins</groupId>
                                                    <artifactId>maven-compiler-plugin</artifactId>
                                                    <version>3.8.1</version>
                                                      <configuration>
                                                      <source>${jdk.version}</source>
                                                      <target>${jdk.version}</target>
                                                      </configuration>
                                                    </plugin>
                                                    <!--通用mapper的插件-->
                                                      <plugin>
                                                      <groupId>org.mybatis.generator</groupId>
                                                      <artifactId>mybatis-generator-maven-plugin</artifactId>
                                                      <version>1.3.2</version>
                                                        <configuration>
                                                          <configurationFile>
                                                            <!--自动生成代码的配置文件-->
                                                              ${basedir}/src/main/resources/generator/generatorConfig.xml
                                                            </configurationFile>
                                                          <overwrite>true</overwrite>
                                                          <verbose>true</verbose>
                                                          </configuration>
                                                          <dependencies>
                                                            <dependency>
                                                            <groupId>mysql</groupId>
                                                            <artifactId>mysql-connector-java</artifactId>
                                                            <version>${mysql.version}</version>
                                                            </dependency>
                                                            <dependency>
                                                            <groupId>tk.mybatis</groupId>
                                                            <artifactId>mapper</artifactId>
                                                            <version>${tk.mybatis.version}</version>
                                                            </dependency>
                                                          </dependencies>
                                                        </plugin>
                                                      </plugins>
                                                      <!--资源文件打包的配置信息-->
                                                        <resources>
                                                          <resource>
                                                          <directory>src/main/java</directory>
                                                            <includes>
                                                            <include>**/*.xml</include>
                                                            </includes>
                                                          </resource>
                                                          <resource>
                                                          <directory>src/main/resources</directory>
                                                            <includes>
                                                            <include>**/*.*</include>
                                                            </includes>
                                                          </resource>
                                                        </resources>
                                                      </build>
                                                    </project>
posted @ 2025-08-08 20:34  yjbjingcha  阅读(9)  评论(0)    收藏  举报