加上MarsDao注解,如下图所示:

  1. @MarsDao("testDao")
  2. public abstract class TestDao {
  3.  
  4. }

DAO 建议用抽象类 的形式创建,这样单表操作可以用抽象方法,多表操作可以自己写sql

单表操作

根据主键查询一条数据

  1. @MarsGet(tableName = "userinfo",primaryKey = "id")
  2. public abstract 要返回的实体类 selectById(int id);
  • 如上面的示例所示,在抽象方法上加上MarsGet注解即可
  • tableName:要从哪张表里的查询
  • primarkey:主键字段名
  • 方法的参数:要查主键是什么的数据就传什么

根据主键更新数据

  1. @MarsUpdate(tableName = "userinfo",operType = OperType.UPDATE,primaryKey = "id")
  2. public abstract int update(实体对象参数);
  • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可
  • tableName:要更新哪张表
  • primarkey:主键字段名
  • operType:设置操作方式为update
  • 方法的参数:任意自定义实体对象或者map,对象的字段要跟数据库表的字段名一致

插入一条数据

  1. @MarsUpdate(tableName = "userinfo",operType = OperType.INSERT)
  2. public abstract int insert(实体对象参数);
  • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可
  • tableName:要插入哪张表
  • operType:设置操作方式为insert
  • 方法的参数:任意自定义实体对象或者map,对象的字段要跟数据库表的字段名一致

根据主键删除一条数据

  1. @MarsUpdate(tableName = "userinfo",operType = OperType.DELETE,primaryKey = "id")
  2. public abstract int delete(int id);
  • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可
  • tableName:要从哪张表删除
  • primarkey:主键字段名
  • operType:设置操作方式为delete
  • 方法的参数:要删除主键是什么值的数据就传什么

多表操作

sql语句固定

  1. @MarsSelect(sql = "select * from userinfo where name = #{name} and age = ${age}", resultType = 要返回的实体类.clss)
  2. public abstract List<要返回的实体类> selectList(实体对象参数);
  • 如上面的示例所示,在抽象方法上加上MarsSelect注解即可
  • sql:sql语句
  • resultType:返回的数据类型
  • 方法的参数:任意自定义实体对象或者map,对象的字段要跟sql中的占位符一致(不包含#{})

sql语句不固定(需要根据条件判断,来动态的拼接语句

  • 这种情况需要使用JdbcTemplete:
  • 在代码里去拼sql,sql拼好以后用下面所示的方式执行
  • sql中的参数一样用#{}或者${}来占位
  1. JdbcTemplate.get("数据源名称,不传自动使用默认数据源").selectList(sql,返回实体类型.class);
  2. JdbcTemplate.get("数据源名称,不传自动使用默认数据源").update(sql,实体对象参数);
  • JdbcTemplate 这里就不多说了,实际使用的时候,开发环境的自动补全功能会自动弹出里面的方法,选择适合自己的就行了

分页查询

使用JdbcTemplate里的selectPageList

  1. public PageModel<要返回的实体类> findPage(PageParamModel pageParamModel) throws Exception {
  2. String sql = "select * from userinfo where name like #{name}";
  3. return JdbcTemplate.get().selectPageList(sql,pageParamModel,DemoEntity.class);
  4. }

参数必须传PageParamModel,返回类型也必须是PageModel

sql语句固定的分页

  1. @MarsSelect(sql = "select * from userinfo where name = #{name} and age = ${age}", resultType = 要返回的实体类.clss,page = true)
  2. public abstract PageModel<要返回的实体类> selectList(PageParamModel pageParamModel);
  • 如上面的示例所示,在抽象方法上加上MarsSelect注解即可
  • sql:sql语句
  • resultType:返回的数据类型
  • 方法的参数:任意自定义实体对象或者map,对象的字段要跟sql中的占位符一致(不包含#{})

占位符解释

  1. #{name}: 这种占位符会被替换成 ? 没有sql注入的风险
  2. ${name}: 这种占位符是字符串拼接,有sql注入的风险

选择数据源

DAO 层的方法上 可以用 DataSource(name="数据源name") 注解 去指定要用的数据源,如果只有一个数据源,则不需要指定

注意事项

  • DAO返回的实体类和作为参数的实体类,字段名称要跟数据库表的字段一致。
  • 第一点中提到的两种实体类 都可以用Map代替