Mybatis逆向工程

mac2024-06-05  50

1.Mybatis逆向工程即我们再也不用根据数据库的表格来写对应的javaBean了,由这个代码生成器来根据表自动生成,除此之外映射文件,接口等也可以自动生成,但是表连接,存储过程等这些复杂的sql的定义还需要我们手动来编写。 2.导入依赖包

<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--逆向工程--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator</artifactId> <version>1.3.6</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.6</version> </dependency>

3.配置generatorConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true" userId="root" password="root"> </jdbcConnection> <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时 把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal 是否强制转换forceBigDecimals--> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!--javaModelGenerator:指定javaBean的生成策略--> <!-- targetProject:目标工程 --> <!--targetPackage="cn.e3mall.pojo":生成POJO/javaBean类的位置,目标包--> <javaModelGenerator targetPackage="bean" targetProject="src\main\java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 sqlMapGenerator:sql映射生成策略 --> <sqlMapGenerator targetPackage="mapper" targetProject="src\main\java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetProject:mapper接口生成的的位置 javaClientGenerator:指定mapper接口所在的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="mapper" targetProject="src\main\java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定要逆向分析哪些表 tableName:表名 domainObjectName:对应的类名 --> <table tableName="userinfo" domainObjectName="UserInfo"></table> <!-- 有些表的字段需要指定java类型 <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" > <property name="useActualColumnNames" value="true"/> <generatedKey column="ID" sqlStatement="DB2" identity="true" /> <columnOverride column="DATE_FIELD" property="startDate" /> <ignoreColumn column="FRED" /> <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> </table> --> </context> </generatorConfiguration>

4.测试

public class MgbTest { public static SqlSessionFactory getSqlSessionFactory(){ InputStream configFile = MgbTest.class.getClassLoader().getResourceAsStream("config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configFile); return sqlSessionFactory; } public static void main(String[] args) throws Exception { testMbg(); } public static void testMbg() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; InputStream configFile = MgbTest.class.getClassLoader().getResourceAsStream("mbg.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings); myBatisGenerator.generate(null); } }

5.结果

6.配置config.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><!--控制台可以输出sql语句--> <setting name="logImpl" value="STDOUT_LOGGING"/> <setting name="cacheEnabled" value="true"/><!--开启二级缓存,本身是默认开启的--> </settings> <environments default="development"> <!--development:开发模式--> <environment id="development"> <transactionManager type="JDBC"/> <!--配置数据库连接信息--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers><!--加载所有的xml文件--> <mapper resource="mapper/UserInfoMapper.xml"></mapper> </mappers> </configuration>

7.实现CRUD

public class MgbTest { public static SqlSessionFactory getSqlSessionFactory(){ InputStream configFile = MgbTest.class.getClassLoader().getResourceAsStream("config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configFile); return sqlSessionFactory; } public static void main(String[] args) throws Exception { //testMbg(); testMyBatis3(); } public static void testMbg() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; InputStream configFile = MgbTest.class.getClassLoader().getResourceAsStream("mbg.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings); myBatisGenerator.generate(null); } public static void testMyBatis3(){ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); UserInfoMapper mapper = session.getMapper(UserInfoMapper.class); //xxxExample就是封装查询条件的 //查询所有 /*List<UserInfo> list = mapper.selectByExample(null); for (UserInfo ui:list) { System.out.println(ui); }*/ //查询员工姓名带成字的 UserInfoExample userInfoExample = new UserInfoExample(); //创建一个Criteria,这个Criteria就是拼装查询条件 UserInfoExample.Criteria criteria = userInfoExample.createCriteria(); criteria.andUsernameLike("%白%"); //加上或年龄等于24 UserInfoExample.Criteria criteria1 = userInfoExample.createCriteria(); criteria1.andUserageEqualTo(24); userInfoExample.or(criteria1); List<UserInfo> list = mapper.selectByExample(userInfoExample); for (UserInfo ui:list) { System.out.println(ui); } } }
最新回复(0)