六盘水市城乡建设局网站,wordpress火车头采集器,厦门站长优化工具,网站建设核心系统正向工程#xff1a;先创建Java实体类#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程#xff1a;先创建数据库表#xff0c;由框架负责根据数据库表#xff0c;反向生成如下资源#xff1a; Java实体类Mapper接口Mapper映射文件
1…正向工程先创建Java实体类由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程先创建数据库表由框架负责根据数据库表反向生成如下资源 Java实体类Mapper接口Mapper映射文件
1、添加依赖和插件
dependenciesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.14/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency!-- log4j日志 --dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency
/dependencies!-- 控制Maven在构建过程中相关配置 --
build!-- 构建过程中用到的插件 --plugins!-- 具体插件逆向工程的操作是以构建过程中插件形式出现的 --plugingroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-maven-plugin/artifactIdversion1.3.0/version!-- 插件的依赖 --dependencies!-- 逆向工程的核心依赖 --dependencygroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-core/artifactIdversion1.3.2/version/dependency!-- 数据库连接池 --dependencygroupIdcom.mchange/groupIdartifactIdc3p0/artifactIdversion0.9.2/version/dependency!-- MySQL驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.8/version/dependency/dependencies/plugin/plugins
/build2、创建MyBatis的核心配置文件mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
!--
核心配置文件中的标签必须按照固定的顺序
properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?
--
configuration!--引入properties文件此时就可以${属性名}的方式访问属性值--properties resourcejdbc.properties/propertiessettings!-- 将表中的下划线字段自动映射为驼峰命名的属性字段 --setting namemapUnderscoreToCamelCase valuetrue/!-- 开启延迟加载 --setting namelazyLoadingEnabled valuetrue //settingstypeAliases!--typeAlias设置某个具体的类型的别名属性type需要设置别名的类型的全类名alias设置此类型的别名若不设置此属性该类型拥有默认的别名即类名且不区分大小写若设置此属性此时该类型的别名只能使用alias所设置的值--!--typeAlias typecom.giser.mybatis.bean.User/typeAlias--!--typeAlias typecom.giser.mybatis.bean.User aliasabc/typeAlias--!--以包为单位设置改包下所有的类型都拥有默认的别名即类名且不区分大小写--package namecom.giser.pojo//typeAliases!--environments设置多个连接数据库的环境属性 default设置默认使用的环境的id--environments defaultdev!--设置连接数据库的环境属性id设置环境的唯一标识可通过environments标签中的default设置某一个环境的id表示默认使用的环境--environment iddev!--transactionManager设置事务管理方式属性type设置事务管理方式typeJDBC|MANAGEDtypeJDBC设置当前环境的事务管理都必须手动处理typeMANAGED设置事务被管理例如spring中的AOP--transactionManager typeJDBC/!--dataSource设置数据源属性type设置数据源的类型typePOOLED|UNPOOLED|JNDItypePOOLED使用数据库连接池即会将创建的连接进行缓存下次使用可以从缓存中直接获取不需要重新创建typeUNPOOLED不使用数据库连接池即每次使用连接都需要重新创建typeJNDI调用上下文中的数据源--dataSource typePOOLED!--设置驱动类的全类名--property namedriver value${jdbc.driver}/!--设置连接数据库的连接地址--property nameurl value${jdbc.url}/!--设置连接数据库的用户名--property nameusername value${jdbc.username}/!--设置连接数据库的密码--property namepassword value${jdbc.password}//dataSource/environment/environments!--引入映射文件--mappers!--加载sql映射文件--!--mapper resourcemappers/UserMapper.xml/--!--Mapper代理方式--!--以包为单位将包下所有的映射文件引入核心配置文件注意此方式必须保证mapper接口和mapper映射文件必须在相同的包下--package namecom.giser.mybatis.mapper//mappers
/configurationjdbc.drivercom.mysql.cj.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/db_mybatis
jdbc.usernameroot
jdbc.passwordroot?xml version1.0 encodingUTF-8 ?
!DOCTYPE log4j:configuration SYSTEM log4j.dtd
log4j:configuration xmlns:log4jhttp://jakarta.apache.org/log4j/appender nameSTDOUT classorg.apache.log4j.ConsoleAppenderparam nameEncoding valueUTF-8/layout classorg.apache.log4j.PatternLayoutparam nameConversionPattern value%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n//layout/appenderlogger namejava.sqllevel valuedebug//loggerlogger nameorg.apache.ibatislevel valueinfo//loggerrootlevel valuedebug/appender-ref refSTDOUT//root
/log4j:configuration3、创建逆向工程配置文件generatorConfig.xml
?xml version1.0 encodingUTF-8?
!DOCTYPE generatorConfigurationPUBLIC -//mybatis.org//DTD MyBatis Generator Configuration 1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd
generatorConfiguration!--targetRuntime: 执行生成的逆向工程的版本MyBatis3Simple: 生成基本的CRUD清新简洁版MyBatis3: 生成带条件的CRUD奢华增强版--context idDB2Tables targetRuntimeMyBatis3Simple!-- 数据库的连接信息 --jdbcConnection driverClasscom.mysql.jdbc.DriverconnectionURLjdbc:mysql://localhost:3306/db_mybatisuserIdrootpasswordroot/jdbcConnection!-- javaBean的生成策略--javaModelGenerator targetPackagecom.giser.mybatis.beantargetProject.\src\main\javaproperty nameenableSubPackages valuetrue /property nametrimStrings valuetrue //javaModelGenerator!-- SQL映射文件的生成策略 --sqlMapGenerator targetPackagecom.giser.mybatis.mappertargetProject.\src\main\resourcesproperty nameenableSubPackages valuetrue //sqlMapGenerator!-- Mapper接口的生成策略 --javaClientGenerator typeXMLMAPPERtargetPackagecom.giser.mybatis.mapper targetProject.\src\main\javaproperty nameenableSubPackages valuetrue //javaClientGenerator!-- 逆向分析的表 --!-- tableName设置为*号可以对应所有表此时不写domainObjectName --!-- domainObjectName属性指定生成出来的实体类的类名 --table tableNamet_emp domainObjectNameEmp/table tableNamet_dept domainObjectNameDept//context
/generatorConfiguration4、代码生成及功能测试
4.1 简洁版
在generatorConfig.xml文件中配置targetRuntimeMyBatis3Simple此时生成的代码为简洁版具备基本的CRUD功能。
4.1.1 生成方式
集成完成后在Maven-Plugins下执行mybatis-generator插件下的mybatis-generator:generator即可。 更新Maven工程找到Plugins下的mybatis-generator执行mybatis-generator:generate此时会根据配置生成t_emp和t_dept两张表的bean实体、Mapper接口及对应的xml映射文件。如下图示
4.1.2 功能测试
Test
public void testMBG() throws IOException {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSession sqlSession new SqlSessionFactoryBuilder().build(is).openSession(true);EmpMapper mapper sqlSession.getMapper(EmpMapper.class);ListEmp empList mapper.selectAll();System.out.println(empList);
}4.2 增强版
在generatorConfig.xml文件中配置targetRuntimeMyBatis3此时生成的代码功能较为全面。
4.2.1 生成方式
集成完成后在Maven-Plugins下执行mybatis-generator插件下的mybatis-generator:generator即可。 更新Maven工程找到Plugins下的mybatis-generator执行mybatis-generator:generate此时会根据配置生成t_emp和t_dept两张表的bean实体、Mapper接口及对应的xml映射文件。如下图示
4.2.2 功能测试
package com.giser.mytatis;import com.giser.mybatis.bean.Emp;
import com.giser.mybatis.bean.EmpExample;
import com.giser.mybatis.mapper.EmpMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** author giserDev* description* date 2023-12-07 22:48:00*/
public class VIPMybatisTest {/*** 集成完成后在Maven-Plugins下执行mybatis-generator插件下的mybatis-generator:generator即可* throws IOException*/Testpublic void testSelect01(){try {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession(true);EmpMapper empMapper sqlSession.getMapper(EmpMapper.class);ListEmp empList empMapper.selectByExample(null);empList.stream().forEach(System.out::println);} catch (IOException e) {throw new RuntimeException(e);}}Testpublic void testSelect02(){try {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession(true);EmpMapper empMapper sqlSession.getMapper(EmpMapper.class);EmpExample empExample new EmpExample();empExample.createCriteria().andDeptIdEqualTo(1);empExample.or().andSexEqualTo(男);ListEmp empList empMapper.selectByExample(empExample);empList.stream().forEach(System.out::println);} catch (IOException e) {throw new RuntimeException(e);}}Testpublic void testUpdate(){try {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession(true);EmpMapper empMapper sqlSession.getMapper(EmpMapper.class);// 会更新所有字段包括空值字段
// int result empMapper.updateByPrimaryKey(new Emp(1, 王五, 123, , 6));// 只更新值不为null的字段int result empMapper.updateByPrimaryKeySelective(new Emp(1, 王五, 123, null, 6));System.out.println(result);} catch (IOException e) {throw new RuntimeException(e);}}}