博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Lolttery】项目开发日志 (二) 数据库的二三事
阅读量:5826 次
发布时间:2019-06-18

本文共 3204 字,大约阅读时间需要 10 分钟。

基本的框架定好了之后,就是数据库的问题咯。在框架上我们选用了现在比较流行的mybatis框架。

mybatis与spring的整合十分简单:

复制代码

不过在使用过程中倒是遇到并解决了一些问题和疑惑

##1、mybatis不能将表名作为参数

这一点是个挺坑爹的事情。源于希望写一个公用的删除接口。删除指定表中指定id的数据。

根据百度的结果,mybatis并不能将表名作为参数。

于是最后的解决方案是混用了spring的jdbcTemplate。只要一个配置:

复制代码

很简单就可以使用。

jdbcTemplate简单的封装了jdbc操作,执行一些与实体无关的sql的时候还是挺方便的。

在设计上id只有自增和字符串两种,所以公用删除方法也挺简单的:

public void commonDelete(String table,Object id){        if(id instanceof String)            jdbcTemplate.execute("delece from "+table+" where id=\""+id+"\"");        else            jdbcTemplate.execute("delete from "+table+" where id="+id+"");    }复制代码

##2、关于bean的问题

mybatis需要一大堆的bean来做各种存储: 查询条件,查询结果,数据库实体巴拉巴拉……

刚刚遇到这个问题的时候着实吓到了我。仿佛看到了一个项目100个类有80个都是各种bean……

目前看来,这是一个不可避免的问题。所以准备用mybatis的童鞋也做好面对一大堆的bean的准备。

不过说回来,有各种代码补全,生成一个Bean也不是很麻烦的事情。但是如何组织这些bean才是麻烦的事情。为了避免日后混乱,我们给bean的命名制定了一套规则,以数据库表名为基本实体,用前后缀和包名进行标识。

##3、意外的学习:mybatis联合查询

在搞bean的时候意外的百度到了mybatis的联合查询,发现还是挺强大的。

大体的流程就是这样的:

(1)定义好一个联合查询的结果Bean,比如现在有User和Blog两个bean,做一个UserBlogs

然后在UserBlogs里面复制User的参数,加一个List blogs。

(2)做映射。主要是为了避免User中的参数和Blog中的参数有重名,会导致框架不知道该把字段交给谁

(3)根据映射做查询。用简单的联合查询sql语句,注意查询结果的字段名要给别名,与映射好的字段一一对应。

然后就可以使用sql进行联合查询,会拿到一个带着博客列表的用户信息。

具体的代码还是看人家大神的博客比较好:

http://www.cnblogs.com/luxiaoxun/p/4035276.html

##4、还是bean的问题

有时候数据库字段太多,写插入、修改语句什么的还是挺闹心的……

于是做了一个简单的插入语句生成器:

/**     * 根据bean生成添加sql语句     * @param table     * @param bean     */    public static void genAddSql(String table,Class bean) {        StringBuilder builder =new StringBuilder();        builder.append("insert into ").append(table);        StringBuilder preffix = new StringBuilder(" (");        StringBuilder surffix = new StringBuilder("(");        Method[] methods = bean.getMethods();        for (Method method : methods) {            String name = method.getName();            if(name.equals("setId"))                continue;            if(name.startsWith("set")){                preffix.append(name.substring(3).toLowerCase()).append(",");                surffix.append("#{").append(name.substring(3).toLowerCase()).append("},");            }        }        preffix.deleteCharAt(preffix.length()-1);        surffix.deleteCharAt(surffix.length()-1);        preffix.append(") values ");        surffix.append(")");        builder.append(preffix).append(surffix);        System.out.println(builder);    }    /**     * 根据bean生成修改sql语句     * @param table     * @param bean     */    public static void genUpdateSql(String table,Class bean) {        StringBuilder builder =new StringBuilder();        builder.append("update ").append(table).append(" set ");        Method[] methods = bean.getMethods();        for (Method method : methods) {            String name = method.getName();            if(name.equals("setId"))                continue;            if(name.startsWith("set")){                String p = name.substring(3).toLowerCase();                builder.append("
"); builder.append(p).append("=#{").append(p).append("} ").append("
"); } } builder.append("where id=#{id}"); System.out.println(builder); }复制代码

转载于:https://juejin.im/post/5a31e9f56fb9a04528468031

你可能感兴趣的文章
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>