02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 项目结构(所需jar包,配置文件)sqlMapConfig.xml的配置内容如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-co

  1. 项目结构(所需jar包,配置文件)

  1. sqlMapConfig.xml的配置内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <!--开启延迟加载 -->

   <settings>

      <!--全局的延迟加载的开关必须要开启 -->

      <setting name="lazyLoadingEnabled" value="true"/>

      <!--积极加载设置成false -->

      <setting name="aggressiveLazyLoading" value="false"/>

      <!--开启二级缓存,缓存中只要是需要配置的针对的都是二级缓存 -->

      <setting name="cacheEnabled" value="true"/>

   </settings>

   

   <typeAliases>

      <!--

          自定义别名:

             type:要定义别名的数据类型

             alias:别名的内容

       -->

       <!--

         非自定义别名:

            jdk中的所用的类的别名直接只用类名即可(不区分大小写)

            如果是基本数据类型的包装类还可以使用基本数据类型的名字

       -->

      <typeAlias type="com.rl.model1.QueryCondition" alias="qc"/>

      <typeAlias type="com.rl.model1.Person" alias="person"/>

   </typeAliases>

   

   <!--数据库的环境的配置 -->

   <environments default="development">

      <environment id="development">

          <transactionManager type="JDBC"/>

          <dataSource type="POOLED">

             <property name="driver" value="com.mysql.jdbc.Driver"/>

             <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>

             <property name="username" value="root"/>

             <property name="password" value="123456"/>

          </dataSource>

      </environment>

   </environments>

   

   <!--集中管理表的映射文件 -->

   <mappers>

      <mapperresource="com/rl/mapper/PersonTestMapper.xml"/>

      <mapperresource="com/rl/mapper/PersonMapper.xml"/>

      <mapperresource="com/rl/mapper/RoleMapper.xml"/>

      <mapperresource="com/rl/mapper/OrdersMapper.xml"/>

      <mapperresource="com/rl/mapper/OrderDetailMapper.xml"/>

   </mappers>

</configuration>

  1. sqlMapGenerator.xml的配置如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

   <!--指定mysql的驱动包的路径,不要放在中文路径下 -->

   <classPathEntrylocation="E:\MyEclipse10\MyBatis\lib\mysql-connector-java-5.0.8-bin.jar"/>

   <!--配置数据源和生成的代码所存放的位置 -->

   <contextid="context1">

      <commentGenerator>

          <!--去除自动生成的注释 -->

          <propertyname="suppressAllComments"value="true"/>

      </commentGenerator>

      

      <jdbcConnection

          driverClass="com.mysql.jdbc.Driver"

          connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis"

          userId="root"

          password="123456"/>

      <!--所生成的实体类的位置默认资源包src -->

      <javaModelGeneratortargetPackage="com.rl.model1"

          targetProject="mybatis0420"/>

      <!--所生成的sqlMap的影射文件的位置,默认资源包src -->

      <sqlMapGeneratortargetPackage="com.rl.mapper"

          targetProject="mybatis0420"/>

 

      <!--为哪些表生成代码 tableName:表名 schema:不用填写,其余属性是禁用例子查询的生成 -->

      <tableschema=""tableName="role"enableCountByExample="false"

          enableUpdateByExample="false"enableDeleteByExample="false"

          enableSelectByExample="false"selectByExampleQueryId="false"/>

          

      <tableschema=""tableName="person_role"enableCountByExample="false"

          enableUpdateByExample="false"enableDeleteByExample="false"

          enableSelectByExample="false"selectByExampleQueryId="false"/>

   </context>

</generatorConfiguration>

  1. 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

  1. ehcache.xml的配置内容如下:

<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

 

   <diskStorepath="java.io.tmpdir"/>

   <defaultCache

           maxElementsInMemory="10000"

           eternal="false"

           timeToIdleSeconds="120"

           timeToLiveSeconds="120"

           maxElementsOnDisk="10000000"

           diskExpiryThreadIntervalSeconds="120"

           memoryStoreEvictionPolicy="LRU">

       <persistencestrategy="localTempSwap"/>

   </defaultCache>

</ehcache>

 4  数据库表

创建数据库:create databasemybatis; use mybatis;

订单.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 15:34:20                           */

/*==============================================================*/

 

drop table if exists ORDERS;

 

drop table if exists ORDER_DETAIL;

 

/*==============================================================*/

/* Table: ORDERS                                               */

/*==============================================================*/

create table ORDERS

(

  ORDER_ID            int(10) not null auto_increment,

  PERSON_ID           int(10),

  TOTAL_PRICE         float(10,2),

  ADDR                varchar(50),

  primary key (ORDER_ID)

);

 

/*==============================================================*/

/* Table: ORDER_DETAIL                                         */

/*==============================================================*/

create table ORDER_DETAIL

(

  DETAIL_ID           int(10) not null auto_increment,

  ORDER_ID            int(10),

  PRICE               float(10,2),

  QUANTITY            int(10),

  ITEM_NAME           varchar(10),

  primary key (DETAIL_ID)

);

角色表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 16:28:01                           */

/*==============================================================*/

 

 

drop table if exists PERSON_ROLE;

 

drop table if exists ROLE;

 

/*==============================================================*/

/* Table: PERSON_ROLE                                          */

/*==============================================================*/

create table PERSON_ROLE

(

  PERSON_ID           int(10),

  ROLE_ID             int(10)

);

 

/*==============================================================*/

/* Table: ROLE                                                 */

/*==============================================================*/

create table ROLE

(

  ROLE_ID             int(10) not null auto_increment,

  ROLE_NAME           varchar(10),

  DESCRIPT            varchar(50),

  primary key (ROLE_ID)

);

人员表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 9:59:18                            */

/*==============================================================*/

 

 

drop table if exists PERSON;

 

/*==============================================================*/

/* Table: PERSON                                               */

/*==============================================================*/

create table PERSON

(

  PERSON_ID           int(10) not null auto_increment,

  NAME                varchar(10),

  GENDER              varchar(1),

  PERSON_ADDR         varchar(50),

  BIRTHDAY            date,

  primary key (PERSON_ID)

);

人员测试表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 9:15:56                            */

/*==============================================================*/

 

 

drop table if exists PERSON_TEST;

 

/*==============================================================*/

/* Table: PERSON_TEST                                          */

/*==============================================================*/

create table PERSON_TEST

(

  ID                  int(10) not null auto_increment,

  NAME                varchar(10),

  GENDER              varchar(1),

  ADDRESS             varchar(50),

  BIRTHDAY            date,

  primary key (ID)

);

7JavaBean的编写

Person.java

package com.rl.model;

 

import java.util.Date;

publicclass Person implements Serializable{

   private Integerid;

   private Stringname;

   private Stringgender;

   private Stringaddress;

   private Datebirthday;

   

   public Integer getId() {

      returnid;

   }

 

   publicvoid setId(Integer id) {

      this.id = id;

   }

 

   public String getName() {

      returnname;

   }

 

   publicvoid setName(String name) {

      this.name = name;

   }

 

   public String getGender() {

      returngender;

   }

 

   publicvoid setGender(String gender) {

      this.gender = gender;

   }

 

   public String getAddress() {

      returnaddress;

   }

 

   publicvoid setAddress(String address) {

      this.address = address;

   }

 

   public DategetBirthday() {

      returnbirthday;

   }

 

   publicvoid setBirthday(Date birthday) {

      this.birthday = birthday;

   }

 

   @Override

   public String toString() {

      return"Person [id=" +id +", name=" +name +", gender=" +gender

             +", address=" +address +", birthday=" +birthday +"]";

   }

}

OrderDetail.java

package com.rl.model1;

 

publicclass OrderDetail {

   private IntegerdetailId;

   private IntegerorderId;

   private Floatprice;

   private Integerquantity;

   private StringitemName;

 

   public Integer getDetailId() {

       returndetailId;

   }

 

   publicvoid setDetailId(Integer detailId) {

       this.detailId = detailId;

   }

 

   public Integer getOrderId() {

       returnorderId;

   }

 

   publicvoid setOrderId(Integer orderId) {

       this.orderId = orderId;

   }

 

   public Float getPrice() {

       returnprice;

   }

 

   publicvoid setPrice(Float price) {

       this.price = price;

   }

 

   public Integer getQuantity() {

       returnquantity;

   }

 

   publicvoid setQuantity(Integer quantity) {

       this.quantity = quantity;

   }

 

   public String getItemName() {

       returnitemName;

   }

 

   publicvoid setItemName(String itemName) {

       this.itemName = itemName;

   }

}

Orders.java

package com.rl.model1;

 

import java.util.List;

publicclass Orders {

   private IntegerorderId;

   private IntegerpersonId;

   private FloattotalPrice;

   private Stringaddr;

   private List<OrderDetail>detailList;

   private Personperson;

   

   public Person getPerson() {

      returnperson;

   }

 

   publicvoid setPerson(Person person) {

      this.person = person;

   }

 

   public List<OrderDetail> getDetailList() {

      returndetailList;

   }

 

   publicvoid setDetailList(List<OrderDetail> detailList) {

      this.detailList = detailList;

   }

 

   public Integer getOrderId() {

       returnorderId;

   }

 

   publicvoid setOrderId(Integer orderId) {

       this.orderId = orderId;

   }

 

   public Integer getPersonId() {

       returnpersonId;

   }

 

   publicvoid setPersonId(Integer personId) {

       this.personId = personId;

   }

 

   public Float getTotalPrice() {

       returntotalPrice;

   }

 

   publicvoid setTotalPrice(Float totalPrice) {

       this.totalPrice = totalPrice;

   }

 

   public String getAddr() {

       returnaddr;

   }

 

   publicvoid setAddr(String addr) {

       this.addr = addr;

   }

}

Person.java

package com.rl.model1;

 

import java.io.Serializable;

import java.util.Date;

import java.util.List;

 

import javax.management.relation.Role;

 

/**

 *做二级缓存的时候需要实现Serializable

 */

public class Person implements Serializable {

        private static final long serialVersionUID = 7728191033619971201L;

        private Integer personId;

        private String name;

        private String gender;

        private String personAddr;     

        private Date birthday;    

        private List<Orders> ordersList;    

        private List<Role> roleList;

        

        public List<Role> getRoleList() {

                  return roleList;

        }

 

        public void setRoleList(List<Role> roleList) {

                  this.roleList = roleList;

        }

 

        public List<Orders> getOrdersList() {

                  return ordersList;

        }

 

        public void setOrdersList(List<Orders> ordersList) {

                  this.ordersList = ordersList;

        }

 

        public Integer getPersonId() {

                  return personId;

        }

 

        public void setPersonId(Integer personId) {

                  this.personId = personId;

        }

 

        public String getName() {

                  return name;

        }

 

        public void setName(String name) {

                  this.name = name;

        }

 

        public String getGender() {

                  return gender;

        }

 

        public void setGender(String gender) {

                  this.gender = gender;

        }

 

        public String getPersonAddr() {

                  return personAddr;

        }

 

        public void setPersonAddr(String personAddr) {

                  this.personAddr = personAddr;

        }

 

        public Date getBirthday() {

                  return birthday;

        }

 

        public void setBirthday(Date birthday) {

                  this.birthday = birthday;

        }

 

        @Override

        public String toString() {

                  return "Person [personId=" + personId + ", name=" + name + ", gender="

                                    + gender + ", personAddr=" + personAddr + ", birthday="

                                    + birthday + "]";

        }

}

PersonRole.java

package com.rl.model1;

 

publicclassPersonRole {

   private IntegerpersonId;

 

   private IntegerroleId;

 

   public Integer getPersonId() {

       returnpersonId;

   }

 

   publicvoid setPersonId(Integer personId) {

       this.personId = personId;

   }

 

   public Integer getRoleId() {

       returnroleId;

   }

 

   publicvoid setRoleId(Integer roleId) {

       this.roleId = roleId;

   }

}

QueryCondition.java

package com.rl.model1;

 

import java.util.Date;

 

publicclassQueryCondition {

  private Stringname;

  private Stringgender;

  private Datebirthday;

  

  public String getName() {

     returnname;

  }

 

  publicvoid setName(String name) {

     this.name = name;

  }

 

  public String getGender() {

     returngender;

  }

 

  publicvoid setGender(String gender) {

     this.gender = gender;

  }

 

  public Date getBirthday() {

     returnbirthday;

  }

 

  publicvoid setBirthday(Date birthday) {

     this.birthday = birthday;

  }

}

Role.java

package com.rl.model1;

 

import java.util.List;

 

publicclass Role {

   private IntegerroleId;

   private StringroleName;

   private Stringdescript;

   private List<Person>personList;

   

   public List<Person> getPersonList() {

     returnpersonList;

  }

 

  publicvoid setPersonList(List<Person> personList) {

     this.personList = personList;

  }

 

  public Integer getRoleId() {

       returnroleId;

   }

 

   publicvoid setRoleId(Integer roleId) {

       this.roleId = roleId;

   }

 

   public String getRoleName() {

       returnroleName;

   }

 

   publicvoid setRoleName(String roleName) {

       this.roleName = roleName;

   }

 

   public String getDescript() {

       returndescript;

   }

 

   publicvoid setDescript(String descript) {

       this.descript = descript;

   }

}

SqlHelper.java

package com.rl.util;

 

import java.util.Date;

import java.util.Map;

 

import org.apache.ibatis.jdbc.SqlBuilder;

 

public class SqlHelper {

        

        public String getSql(Map<String,Object> map) {

                  //获得所有可能传递过来的参数

                  String name = (String) map.get("name");

                  String gender = (String) map.get("gender");

                  String personAddr = (String) map.get("personAddr");

                  Date birthday = (Date) map.get("birthday");

                  

                  SqlBuilder.BEGIN();

                  //指定所有的列

                  SqlBuilder.SELECT("*");

                  SqlBuilder.FROM("person");

                  if(name != null){

                           //SqlBuilder中不支持${}

                           SqlBuilder.WHERE("name like '%"+name+"%'");

                  }

                  if(gender != null){

                           SqlBuilder.WHERE("gender = #{gender}");

                  }

                  if(personAddr != null){

                           //SqlBuilder中不支持${}

                           SqlBuilder.WHERE("person_addr like '%"+personAddr+"%'");

                }

                  if(birthday != null){

                           SqlBuilder.WHERE("birthday < #{birthday}");

                  }

                  

                  return SqlBuilder.SQL();

        }

}

 



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
6月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
247 0
|
6月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
552 0
|
6月前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
88 0
|
6月前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
84 0
|
6月前
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
92 0
|
2月前
|
JSON 安全 Go
Go语言项目工程化 —— 日志、配置、错误处理规范
本章详解Go语言项目工程化核心规范,涵盖日志、配置与错误处理三大关键领域。在日志方面,强调其在问题排查、性能优化和安全审计中的作用,推荐使用高性能结构化日志库zap,并介绍日志级别与结构化输出的最佳实践。配置管理部分讨论了配置分离的必要性,对比多种配置格式如JSON、YAML及环境变量,并提供viper库实现多环境配置的示例。错误处理部分阐述Go语言显式返回error的设计哲学,讲解标准处理方式、自定义错误类型、错误封装与堆栈追踪技巧,并提出按调用层级进行错误处理的建议。最后,总结各模块的工程化最佳实践,助力构建可维护、可观测且健壮的Go应用。
|
4月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
281 5
|
5月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
157 23
|
6月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。