MyBaits+MySql简单配置
- 格式:doc
- 大小:71.00 KB
- 文档页数:8
MyBatis实现Mysql数据库分库分表操作和总结前⾔作为⼀个数据库,作为数据库中的⼀张表,随着⽤户的增多随着时间的推移,总有⼀天,数据量会⼤到⼀个难以处理的地步。
这时仅仅⼀张表的数据就已经超过了千万,⽆论是查询还是修改,对于它的操作都会很耗时,这时就需要进⾏数据库切分的操作了。
MyBatis实现分表最简单步骤既然⽂章的标题都这么写了,不如直接上⼲货来的⽐较实际,我们就先来看看如何实现最简单的分表。
1、我们模拟⽤户表数据量超过千万(虽然实际不太可能)2、⽤户表原来的名字叫做user_tab,我们切分为user_tab_0和user_tab_1(实际也可能不是这么随意的名字),这样就能把原来千万的数据分离成两个百万的数据量的两张表了。
3、如何操作这两张表呢?我们利⽤userId也就是⽤户的唯⼀标识进⾏区分。
4、userId%2 == 0的⽤户操作表user_tab_0,同理userId%2 == 1的⽤户操作表user_tab_15、那么在MyBatis中sql语句如何实现呢?下⾯是举例查询⼀个⽤户的sql语句<select id="getUser" parameterType="java.util.Map" resultType="UserDO">SELECT userId, nameFROM user_tab_#{tabIndex}WHERE userId = #{userId}</select>其中我们传⼊了两个参数tabIndex和userId,tabIndex就是需要操作表的标⽰值(0或1),这样如果需要查询userId为5的⽤户,那么最终出现的sql语句就会是:SELECT userId, nameFROM user_tab_1WHERE userId = 5其他多余的DAO服务和实现我这⾥就不多展⽰了,相信聪明的你肯定会的。
mybatis连接mysql数据库tinyint为boolean类型详解字段类型为tinyint(1)的返回类型设置为integer
现象描述:
数据库表字段类型为:tinyint 长度为1,即类型为:tinyint(1)
查询时,该字段对应的的java类型为boolean
问题描述:
如何将该字段的java类型设置为Integer?
解决⽅案:
1. 在jdbcUrl添加参数:tinyInt1isBit=false(默认为true);
2.避免使⽤长度为1的tinyint类型字段存储数字格式的数据;
补充知识:【mybatis】mysql数据库tinyint类型对应java类型
数据库的tinyint类型可以对应java的boolean类型,false代表0,true代表1。
ng.Boolean
注:长度必须设置为1
以上这篇mybatis 连接mysql数据库 tinyint 为boolean类型详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
mysqlupdate语法mybatis一、**MySQL Update语法简介**MySQL的Update语句用于修改表中的数据,允许你根据条件更新表中的记录。
基本的Update语法如下:```sqlUPDATE 表名SET 列名1 = 新值1, 列名2 = 新值2, ...WHERE 条件;```* "表名"是你想要更新的表的名称。
* "列名1, 列名2, ..." 是你想要更新的列的名称。
* "新值1, 新值2, ..." 是你想要设置的新值。
* "WHERE" 子句是一个可选的条件,用于指定你想要更新的记录。
二、**MyBatis与MySQL Update语法整合**MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
通过MyBatis,你可以将MySQL Update语法与你的项目整合,以实现数据库操作的高效性和灵活性。
首先,你需要在MyBatis的映射文件(如Mapper.xml)中定义一个更新语句。
这通常包括一个更新标记(通常是`<update>`标签),一个SQL片段(通常是`<selectStatement>`),以及可能的参数映射(如<parameterMap>)。
其次,在Java代码中,你需要调用MyBatis的SqlSession对象来执行这个更新语句。
这通常包括获取SqlSession对象(通常在Spring框架中),以及调用SqlSession对象的executeUpdate方法。
三、**示例**以下是一个简单的示例,展示了如何使用MyBatis和MySQL Update语法来更新一个表中的数据:1. 首先,我们定义一个Mapper.xml文件:```xml<update id="updateUser"parameterType="er">UPDATE usersSET name = #{name}, age = #{age}WHERE id = #{id}</update>```这里的`User`类代表了我们要更新的数据,包含了name、age和id三个属性。
SpringBoot+Mybatis-plus多数据源配置(MySQL、Sqlserver)前⾔:本章案例利⽤dynamic-datasource-spring-boot-starter集成多数据源,mybaits-plus采⽤3.3.0版本,主要讲述配置多数据源,其案例中也包含了逻辑删除、攻击SQL阻断解析器、p6spySQL性能分析打印、事务以及分页和乐观锁插件。
dynamic-datasource-spring-boot-starter 是⼀个基于springboot的快速集成多数据源的启动器,其⽀持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.0.x。
⼀、pom.xml<!--代码简化,⼯具相关 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--SQLServer 驱动--><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version><scope>runtime</scope></dependency><!--mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>2.4.2</version></dependency><dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.8.0</version></dependency>⼆、application.ymlserver:port: 8888servlet:context-path: /serverspring:application:name: springboot-manyDataSourcesdatasource:p6spy: truedynamic:datasource:master:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:mysql://localhost:3306/datasourceName?characterEncoding=utf8&useSSL=false&serverTimezone=GMTusername: rootpassword: root# url: jdbc:mysql://localhost:3306/ datasourceName?characterEncoding=utf8&useSSL=false&serverTimezone=GMT# username: root# password: root# driver-class-name: com.mysql.cj.jdbc.Driverdb2:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:sqlserver://localhost:1433;DatabaseName=datasourceNameusername: sapassword: root# url: jdbc:sqlserver://localhost:1433;DatabaseName= datasourceName# username: sa# password: root# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver#⽇志logging:level:com.example.demo : debug三、spy.propertiesmodulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory# ⾃定义⽇志打印logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger#⽇志输出到控制台appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger# 使⽤⽇志系统记录 sql#appender=com.p6spy.engine.spy.appender.Slf4JLogger# 设置 p6spy driver 代理deregisterdrivers=true# 取消JDBC URL前缀useprefix=true# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.excludecategories=info,debug,result,commit,resultset# ⽇期格式dateformat=yyyy-MM-dd HH:mm:ss# 实际驱动可多个#driverlist=org.h2.Driver# 是否开启慢SQL记录outagedetection=true# 慢SQL记录标准 2 秒outagedetectioninterval=2四、MybatisPlusConfig@Configuration@EnableTransactionManagement//开启事务public class MybatisPlusConfig {/*** mybatisplus 分页插件* @return*/@Beanpublic PaginationInterceptor paginationInterceptor(){PaginationInterceptor paginationInterceptor = new PaginationInterceptor();List<ISqlParser> sqlParserList = new ArrayList<>();// 攻击 SQL 阻断解析器、加⼊解析链;防⽌⼩⽩或者恶意进⾏delete update 全表操作。
Mybatis的配置⽂件和映射⽂件详解⼀、Mybatis的全局配置⽂件1、SqlMapConfig.xml(名称可变)是mybatis的全局配置⽂件,配置内容如下:properties(属性)settings(全局配置参数)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象⼯⼚)plugins(插件)environments(环境集合属性对象)environment(环境⼦属性对象)transactionManager(事务管理)dataSource(数据源)mappers(映射器)2、properties将数据库连接参数单独配置在db.properties(名称可变)中,放在类路径下。
这样只需要在SqlMapConfig.xml中加载db.properties的属性值。
这样在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。
将数据库连接参数只配置在db.properties中,原因:⽅便对参数进⾏统⼀管理,其它xml可以引⽤该db.properties例如:db.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisername=rootjdbc.password=root相应的SqlMapConfig.xml<properties resource="db.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${ername}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>注意: MyBatis 将按照下⾯的顺序来加载属性:⾸先、在properties标签中指定的属性⽂件⾸先被读取。
Java中使用MyBatis Plus连接和操作MySQL数据库1. 简介近年来,Java语言以其跨平台特性和广泛的应用领域成为了全球最受欢迎的编程语言之一。
而MySQL作为一种强大的开源关系型数据库,也是Java开发者首选的数据库之一。
在Java中,我们可以使用MyBatis Plus来连接和操作MySQL数据库,提升开发效率和简化数据库操作。
2. MyBatis Plus简介MyBatis Plus是基于MyBatis的一款增强工具,旨在简化和提升MyBatis的使用体验。
它提供了一系列强大的功能,如代码生成器、分页插件、性能分析插件等,使得开发者能够更加便捷地开发和维护数据库相关的应用程序。
3. 连接MySQL数据库在使用MyBatis Plus连接MySQL数据库之前,我们需要先在项目中引入相关的依赖。
可以通过Maven或Gradle等构建工具来管理项目的依赖。
在pom.xml或build.gradle文件中添加相应的依赖项,然后进行构建操作。
在Java代码中,我们需要创建一个数据源并配置相关的数据库连接信息。
可以使用MySQL提供的JDBC驱动程序来管理数据库连接。
在MyBatis Plus中,我们可以使用com.mysql.cj.jdbc.Driver作为驱动类,指定数据库的URL、用户名和密码来建立连接。
4. 创建实体类在进行数据库操作之前,我们需要定义与数据库表对应的实体类。
在Java中,我们可以使用POJO(Plain Old Java Object)来表示实体类。
POJO是一种普通的Java对象,不继承任何特定的父类或实现任何特定的接口。
在MyBatis Plus中,实体类需要使用@Table注解来指定对应的数据库表名,使用@Column注解来指定字段名,以及指定主键等属性。
通过在实体类中定义与表对应的字段和属性,我们可以通过MyBatis Plus来进行数据库的增删改查操作。
在MyBatis 中,使用MySQL 的`LIKE` 操作符可以实现模糊查询。
在MyBatis 的SQL 映射文件中,你可以使用`LIKE` 关键字来构建模糊查询的条件。
下面是一个示例,演示如何在MyBatis 中使用`LIKE` 进行模糊查询:1. 首先,确保你已经配置了MyBatis 和MySQL 数据库。
2. 创建一个SQL 映射文件,例如`UserMapper.xml`。
3. 在映射文件中定义一个查询方法,并在该方法中构建一个包含`LIKE` 操作符的SQL 语句。
例如:```xml<mapper namespace="erMapper"><select id="findUsersByUsername" resultType="er">SELECT * FROM users WHERE username LIKE CONCAT('%', #{username}, '%')</select></mapper>```在上面的示例中,我们定义了一个名为`findUsersByUsername` 的查询方法。
这个方法会查询`users` 表中的记录,其中`username` 列的值包含传入参数`username` 的值。
通过使用`CONCAT` 函数和两个百分号通配符,我们可以实现模糊查询的效果。
4. 在你的Java 代码中,通过MyBatis 的`SqlSession` 对象调用你定义的查询方法。
例如:```javatry (SqlSession session = sqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class);String username = "john";List<User> users = mapper.findUsersByUsername(username);// 处理查询结果...}```在上面的示例中,我们通过`session.getMapper(UserMapper.class)` 获取了`UserMapper` 接口的实例,然后调用了`findUsersByUsername` 方法来执行模糊查询。
JAV A通过MyBatis调用MySql存储过程和函数1.引言无论是采用SPRING MVC框架开发WEB画面,还是开发需按一定时间间隔执行的批处理,都可能要调用数据库的存储过程或函数。
其间调用参数设置不正会浪费大量调试时间初学者甚至放弃使用存储过程。
本文记录了通过MyBatis调用MySql存储过程和函数的具体参数设置内容,供参考。
2.MySql存储过程例/*全公司员工下一年度带薪休假一发赋予处理*/CREATE DEFINER=`DBuser`@`%` PROCEDURE `paid_vacation_compute `( OUT p_返回值 INT(11) ,INOUT p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))PROC_START:BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENSET p_返回值 = 9;LEAVE PROC_START;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENSET p_返回值 = 6;LEAVE PROC_START;END IF;END LOOP;COMMIT;END3.MySql函数例CREATE DEFINER=`DBuser`@`%` FUNCTION ` paid_vacation_compute `( p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))) RETURNS int(11)BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENRETURN 9;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENRETURN 6;END IF;END LOOP;COMMIT;END4.MySql存储过程调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { call paid_vacation_compute (#{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT},#{StaffNumber,javaType=String, jdbcType=CHAR, mode=INOUT},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN})}</select></mapper>5.MySql函数调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { #{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT} =call paid_vacation_compute (#{StaffNumber,javaType=String, jdbcType=CHAR, mode=IN},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN} )} </select></mapper>6.JAVA调用例1(MySql存储过程和函数相同)package com.XXX.impl;import java.util.ArrayList;import java.util.List;import com.XXX.web.bean.VacationCreateBean;import com.XXX.web.dao.BaseInfoEditDAO;import com.XXX.web.util.BasicSqlSupport;public class BaseInfoEditDAOImpl extends BasicSqlSupport implements BaseInfoEditDAO { public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception {boolean blnFlag=false;//成功FLAG;//全公司员工下一年度带薪休假一发赋予处理VacationCreateBean objVacationCreateBean = new VacationCreateBean();objVacationCreateBean.setStaffNumber(objUserInfo.getSTAFF_NUMBER());objVacationCreateBean.setHireDate(objUserInfo.getDATE_HIRE().toString());objVacationCreateBean.setOperateID(objUserInfo.getCREATE_USER_ID());objVacationCreateBean.setDhcWorkYearsShinKi(objUserInfo.getDHC_WORK_YEARS());String returnValue = (String)this.session.selectOne("com.XXX.web.mapper.base_info_edit.VacationProcedure", objVacationCreateBean);//System.out.println("staffNumber=" + objVacationCreateBean.getStaffNumber());//System.out.println("result=" + objVacationCreateBean.getReturnValue());//System.out.println("returnValue=" + returnValue);//追加結果の判断blnFlag=true;return blnFlag;}}7.処理DAO接口package com.XXX.web.dao;import java.util.List;import com.XXX.web.bean.BaseInfoEditBean;/*** 员工基本信息画面の処理DAO*/public interface BaseInfoEditDAO {public List<BaseInfoEditBean> selectAuthoriyList() throws Exception;public String selectStaffId() throws Exception;public int selectOpetateTimeNum(String strStaffNumber) throws Exception;public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public boolean updateBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public BaseInfoEditBean searchBaseInfo(String strStaffNumber) throws Exception; }8.共同処理package com.XXX.web.util;import org.apache.ibatis.session.SqlSession;public class BasicSqlSupport{protected SqlSession session;public SqlSession getSession() {return session;}public void setSession(SqlSession session) {this.session = session;} }9. DAO与MAP间的交互BEANpackage com.XXX.web.bean;import java.io.Serializable;public class VacationCreateBean implements Serializable{private int ReturnValue;private String StaffNumber;private String HireDate;private String OperateID;private int WorkYearsShinKi;public int getReturnValue() {return ReturnValue;}public void setReturnValue(int returnValue) {ReturnValue = returnValue;}public String getStaffNumber() {return StaffNumber;}public void setStaffNumber(String staffNumber) {StaffNumber = staffNumber;}public String getHireDate() {return HireDate;}public void setHireDate(String hireDate) {HireDate = hireDate;}public String getOperateID() {return OperateID;}public void setOperateID(String operateID) {OperateID = operateID;}public int getDhcWorkYearsShinKi() {return dhcWorkYearsShinKi;}public void setDhcWorkYearsShinKi(int dhcWorkYearsShinKi) {this.dhcWorkYearsShinKi = dhcWorkYearsShinKi;}}10.通过MAIN函数进行调用package com.ohc.pms.batch;import java.io.FileInputStream;import java.io.IOException;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class VacationCreate {/**JDBC驱动名 */static String jdbcDriver = "com.mysql.jdbc.Driver";/**DB URL */static String dbURL = "jdbc:mysql://172.999.999.35:3306/empdb";/** DB用户名 */static String user = "empuser";/**DB密码 */static String pass = "empuser123";/**日志输出 */static protected Logger log = Logger.getLogger(VacationCreate.class );public static void main(String[] args) {Connection conn = null;CallableStatement stmt = null;try{PropertyConfigurator.configure(System.getProperty("user.dir") + "\\" + "log4j.properties");("実行路径:" + System.getProperty("user.dir"));String fileName = "jdbc.properties"; // 属性文件名Properties conf = new Properties();try {conf.load(new FileInputStream(System.getProperty("user.dir") + "\\" + "jdbc.properties"));} catch (IOException e) {System.err.println("Cannot open " + fileName + ".");e.printStackTrace();System.exit(-1); // 程序終了}// 读入jdbcDriver = conf.getProperty("driver");dbURL = conf.getProperty("url");user = conf.getProperty("user");pass = conf.getProperty("password");//JDBC driver登録Class.forName("com.mysql.jdbc.Driver");("DB连接。
mysql注解批量添加mybatis_Mybatis注解方式实现批量插入数据库MyBatis是一个开源的持久化框架,它提供了一种简单而灵活的方式来访问关系数据库。
在MyBatis中,可以使用注解方式来实现批量插入数据库的操作。
本文将介绍如何使用MyBatis注解来实现批量插入数据。
首先,需要在Maven或Gradle中添加MyBatis依赖。
以下是使用Maven的示例配置:```xml<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency></dependencies>```接下来,需要创建一个数据模型类,用于表示数据库中的表结构。
假设我们有一个名为User的表,包含id、name和age字段,那么对应的数据模型类可以如下所示:```javapublic class Userprivate Long id;private String name;private Integer age;// 省略getter和setter方法```然后,需要创建一个Mapper接口,用于定义数据库操作的方法。
在该接口中,我们将使用注解方式来实现批量插入数据的方法。
假设我们的Mapper接口为UserMapper,那么可以如下所示:```javapublic interface UserMapper"<script>","INSERT INTO user (name, age) VALUES ","<foreach collection='list' item='user' separator=','>","(#{}, #{user.age})","</foreach>","</script>"})```接下来,需要在MyBatis的配置文件中配置Mapper接口的扫描路径,并且使用注解配置的方式来启用Mapper接口。
springboot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置⽅法此⽅法为极简配置,⽀持MySQL数据库多库连接、⽀持Hikari连接池、⽀持MyBatis(包括Dao类和xml⽂件位置的配置)。
1、pom.xml中引⼊依赖:<!-- Begin of DB related --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version><exclusions><exclusion><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- End of DB related -->我们使⽤了mybatis-spring-boot-starter,并让它把tomcat-jdbc连接池排除掉,这样spring-boot就会寻找是否有HikariCP可⽤,第⼆个依赖就被找到了,然后mysql-connector也有了。
一.安装MySql首先下载Mysql,及其管理工具(可图形化操作)mysql administrator在catalogs中创建新的数据库和表,注,如要中文数据,在charset中选utf-8或gbk如卸载后重装要把所有注册表中内容及c:盘用户下所有mysql文件夹都删除二.文件结构需要使用的Jar包:mybatis-3.0.5.jar(mybatis核心包)在创建表后三.搭建MyBatis环境Configuration.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC"-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver"value="com.mysql.jdbc.Driver"/> <!--iotek是数据库名字--><property name="url"value="jdbc:mysql://127.0.0.1:3306/iotek?useUnicode=true&characte rEncoding=UTF-8"/><property name="username"value="root"/><property name="password"value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/promise/maps/Account.xml"/> </mappers></configuration>SessionFactory.javapublic class SessionFactory {private static SqlSessionFactory sqlSessionFactory = null;static {//配置使用mysql数据库String resource = "com/promise/util/configuration.xml";Reader reader = null;try {reader = Resources.getResourceAsReader(resource);} catch (IOException e) {e.printStackTrace();}sqlSessionFactory = newSqlSessionFactoryBuilder().build(reader);}public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory;}}创建实例Account.javapublic class Account{private String firstName;private int id;public int getId(){return id;}public void setId(int id){this.id = id;}public String getFirstName(){return firstName;}public void setFirstName(String firstName){this.firstName = firstName;}}创建sql语句Account.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.promise.mpas"><select id="selectAccountById"parameterType="int"resultType="com.promise.bean.Account"><!-- account是表名 -->select * from account where id = #{id}</select><select id="selectAccountByIdAndName"parameterType="com.promise.bean.Account"resultType="com.promise.bean.Account">select * from account<where><if test = "id != null and id != -1 ">AND id = #{id}</if><if test = "firstName != null">AND firstName = #{firstName}</if><if test = "gender != null">AND gender = #{gender}</if></where></select><insert id="insertAccount"parameterType="com.promise.bean.Account">i nsert into account(id, firstName, lastName, gender) value(#{id}, #{firstName}, #{lastName}, #{gender}) </insert><update id="updateAccount"parameterType="com.promise.bean.Account">update accountsetfirstName=#{firstName},lastName=#{lastName},gender=#{gender}where id=#{id}</update><delete id="deleteAccount"parameterType="int">delete from account where id=#{id} </delete></mapper>创建使用的接口AccountDao.javapublic class AccountDao{public Account query(Integer id) {SqlSession session =SessionFactory.getSqlSessionFactory().openSession();Account account = null;try {account = (Account)session.selectOne("com.promise.mpas.selectAccountById", id);} catch (Exception e) {e.printStackTrace();} finally {session.close();}return account;}public Account query(Account acc) {SqlSession session =SessionFactory.getSqlSessionFactory().openSession();Account account = null;try {account = (Account)session.selectOne("com.promise.mpas.selectAccountByIdAndName", acc); } catch (Exception e) {e.printStackTrace();} finally {session.close();}return account;}public void insert(Account account) {SqlSession session =SessionFactory.getSqlSessionFactory().openSession();try {session.insert("com.promise.mpas.insertAccount", account); } catch (Exception e) {e.printStackTrace();} finally {mit();session.close();}return ;}public void update(Account account) {SqlSession session =SessionFactory.getSqlSessionFactory().openSession();try {session.update("com.promise.mpas.updateAccount", account); } catch (Exception e) {e.printStackTrace();} finally {mit();session.close();}return ;}public void delete(int id) {SqlSession session =SessionFactory.getSqlSessionFactory().openSession();try {session.delete("com.promise.mpas.deleteAccount", id);} catch (Exception e) {e.printStackTrace();} finally {mit();session.close();}return ;}}测试Test.javapublic class Test {public static void main(String[] args) {Test test = new Test();Account user = test.quareByAccount();System.out.println(user.getId());System.out.println(user.getFirstName());System.out.println(user.getLastName());System.out.println(user.getGender());}public void insert(){AccountDao accountDao = new AccountDao(); Account user = new Account();user.setFirstName("啊3");user.setLastName("bbb3");user.setGender((byte) 1);accountDao.insert(user);}public void update(){AccountDao accountDao = new AccountDao(); Account user = new Account();user.setId(1);user.setFirstName("a2");user.setLastName("啊啊2");user.setGender((byte) 1);accountDao.update(user);}public void delete(int id){AccountDao accountDao = new AccountDao(); accountDao.delete(id);}public Account quareById(int id){AccountDao accountDao = new AccountDao();return accountDao.query(id);}public Account quareByAccount(){AccountDao accountDao = new AccountDao(); Account user = new Account();user.setId(-1);// user.setId(1);// user.setFirstName("a2");user.setGender((byte) 0);return accountDao.query(user);}}Web.xml<?xml version="1.0"encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"></web-app>。