MarsDao

    • 创建一个抽象类
    • 加上MarsDao注解,如下图所示:
    • 你可以自己在DAO里写实现方法,在方法里用JdbcTemplate执行sql来操作数据库,但是我们也提供了下面的几种方式来简化开发

    • 本篇章除了讲述MarsDao的用法,在最底下还讲述了字段映射的方法,请勿忽略哦

    1. public abstract 要返回的实体类 selectById(int id);
    • 如上面的示例所示,在抽象方法上加上MarsGet注解即可

    • tableName:要从哪张表里的查询

    • primarkey:主键字段名

    • 方法的参数:要查主键是什么的数据就传什么

    根据主键更新数据

    1. public abstract int update(实体对象参数);
    • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可

    • tableName:要更新哪张表

    • operType:设置操作方式为update

    • 方法的参数:任意自定义实体对象或者map

    1. @MarsUpdate(tableName = "userinfo",operType = OperType.INSERT)
    2. public abstract int insert(实体对象参数);
    • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可

    • tableName:要插入哪张表

    • operType:设置操作方式为insert

    • 方法的参数:任意自定义实体对象或者map

    根据主键删除一条数据

    • 如上面的示例所示,在抽象方法上加上MarsUpdate注解即可
    • tableName:要从哪张表删除

    • primarkey:主键字段名

    • 方法的参数:要删除主键是什么值的数据就传什么

    多表查询

    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拼好以后用下面所示的方式执行
    1. JdbcTemplate.get("数据源名称,不传自动使用默认数据源").selectList(sql,返回实体类型.class);
    • JdbcTemplate 这里就不多说了,实际使用的时候,开发环境的自动补全功能会自动弹出里面的方法,选择适合自己的就行了
    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语句固定的分页

    • 如上面的示例所示,在抽象方法上加上MarsSelect注解即可

    • sql:sql语句

    • resultType:返回的数据类型

    • page:必须设置为true

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

    占位符解释

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

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

    实体类的字段映射

    1. com.alibaba.fastjson.annotation.JSONField

    在实体类的字段上加上这个注解,设置name属性为数据库字段名

    1. public class TestA{
    2. @JSONField(name = "数据库里的name字段名")
    3. private String name;
    4. @JSONField(name = "数据库里的age字段名")
    5. private String age;
    6. @JSONField(name = "数据库里的id字段名")
    7. private int id;
    8. }
    • 如果实体类的属性名和数据库字段名一致,则不需要写这个映射