mybatis自动生成java代码

mybatis自动生成java代码

  1. 背景

    首先为何需要使用java代码来代替xml?主要是某某号称扫描安全软件扫描到xml里面带有$符号就认为存在sql注入风险,但其实使用工具生成的xml是不存在sql注入风险,比如order by ${XXX}, from xxxx_$(date)等,所以通过这些例子就可以看出,这款扫描安全软件有点不友好,但客户不接受,比较信任花费了87万的软件,所以只能使用java代码来代替xml。

  2. 手动通过java写sql
    2.1 简单sql直接注解在mapper接口上即可,比如:

    /**		
    *直接写sql
    **/
    
    @Select({
    		"select",
    "`XXX_id`",
    "from XXX_info",
    "where `ou_id` = #{Id,jdbcType=VARCHAR}"
    })               
    @Results({@Result(column = "XXX_id", property = "XXXId",               jdbcType = JdbcType.VARCHAR)})
    List<String> getXXX(String Id);
    

    2.1 复杂的sql
    复杂的sql就需要自己提供一个拼接函数了,稍微需要注意的地方就是提供的拼接函数的参数也需要加上@Param注解,否则会报arg0参数不存在,这个主要是在mybatis的版本3.4.6之后就需要这么干了,具体实例如下:
    Mapper:

    	@SelectProvider(type = SqlProvider.class, method = "getQueryingXXX")
    	@Results({@Result(column = "XXX_id", property = "XXXId", jdbcType = JdbcType.VARCHAR)})
    	List<String> getQueryingXXX(@Param("searchValue") String searchValue,   @Param("owner") String owner, @Param("id") String id);
    

    SqlProvider:

    public String getQueryingXXX(@Param("searchValue") String searchValue, @Param("owner") String owner, @Param("id") String id) {
    	SQL sql = new SQL();
    	sql.SELECT("XXX_id");
    	sql.FROM("XXXXX");
    	final StringBuffer condition = new StringBuffer();
    	condition.append(String.format("`id`=#{id} "));
    	if(searchValue != null && searchValue.length()>0){
    		condition.append(String.format(" AND ( " +
    				"      `pipeline_id` LIKE CONCAT('%%', #{searchValue}, '%%') OR " +
    				"      `pipeline_name` LIKE  CONCAT('%%', #{searchValue}, '%%')" +
    				"      ) "));
    	}
    	if(owner != null && owner.length()>0){
    		condition.append(String.format(" AND (owner =  #{owner})"));
    	}
    	sql.WHERE(condition.toString());
    	return sql.toString();
    }
    

3.自动生成java代码的脚本

javaClientGenerator type="XMLMAPPER"  改成 javaClientGenerator type="ANNOTATEDMAPPER"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 提供了一个名为 MyBatis Generator 的代码生成器,可以根据数据库表结构自动生成对应的 Java 代码。以下是使用 MyBatis Generator 生成 Java 代码的步骤: 1. 添加 MyBatis Generator 插件依赖 ```xml <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> ``` 2. 编写 MyBatis Generator 配置文件 在项目根目录下创建一个名为 `generatorConfig.xml` 的 XML 配置文件,定义要生成的 Java 代码的相关配置,例如数据库连接信息、要生成的表、生成的 Java 类名、生成的包名等。 ```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="mysql" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="123456"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="./src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="user" domainObjectName="User"/> </context> </generatorConfiguration> ``` 上面的示例配置文件定义了一个名为 `mysql` 的上下文,指定了数据库连接信息、生成的 Java 模型类和映射文件的包名和输出路径、生成的 DAO 接口的包名和输出路径,以及要生成的表名和对应的 Java 类名。 3. 运行 MyBatis Generator 在 Maven 项目中,可以使用 Maven 插件来运行 MyBatis Generator。在项目根目录下的 `pom.xml` 文件中添加如下配置: ```xml <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <configurationFile>generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> </plugin> ``` 然后在命令行中执行以下命令: ``` mvn mybatis-generator:generate ``` MyBatis Generator 将会根据配置文件自动生成 Java 代码、映射文件和 DAO 接口。生成的代码将会保存在 `target/generated-sources` 目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值