[TOC] 我们在使用各种语言的驱动连接MySQL时,是这个样子的: ![](https://oss.showapi.com/doc/3105/117/77b79da64f764057a2d21f8bc63215a8.png) 通常稍大的系统,都会使用不止一种数据库,您的项目里可能会放置各种数据库的驱动包。 而如果使用易源平台操作MySQL,则会是这个样子的: ![](https://oss.showapi.com/doc/3105/117/a7eb2b02bf044631b6a8890de3e73cd3.png) <br/><br/><br/><br/> # 1. 用易源平台操作MySql 易源的MySQL连接器将MySQL数据库转化为通用数据源,并可以使用http接口进行全部数据库操作,包括但不限于增、删、查、改方法。 <br/><br/><br/><br/> ## 1.1 创建表 我们来创建一张简单的表,结构如下代码: ```java { "age": "int", "name": "varchar(255)", "address": "varchar(255)" } ``` 进入[【MySQL通用模板接口】](https://www.showapi.com/apiGateway/view?apiCode=27 "【MySQL通用模板接口】"),按以下图示进行操作: ![](https://oss.showapi.com/doc/3105/117/8d69b419299d49ec8ecfc3da2395cae7.png) 至此建表完成。 <br/><br/><br/><br/> ## 1.2 查看所有数据表 我们来验证下刚才建的表是否成功,如下操作: ![](https://oss.showapi.com/doc/3105/117/ba1068c4239e4194befca866cf0845e5.png) 也可以打开MySQL客户端,查看表结构: ![](https://oss.showapi.com/doc/3105/117/65e8d1207c924638874e0da0f846c6fd.png) <br/><br/><br/><br/> ## 1.3 插入记录 表已经有了,现在来插入一条记录,如下操作: ![](https://oss.showapi.com/doc/3105/117/3163ce1102534691b63508d99aa04a2a.png) <br/><br/><br/><br/> ## 1.4 插入记录(高级用法) 在上面的章节中,您需要构建一个这样的对象,然后把它tostring()过来: ```json { "name": "李四", "age": 28 } ``` 感觉还是麻烦。假设我要插入一条新记录,这条记录有10个字段,其中8个字段是默认值,不需要外面传入,只有2个变量是客户端传入,我们也可以在上面的章节基础上,做一些高级用法。 <br/><br/><br/><br/> ## 1.4.1 定义输入参数 以上面的例子,新插入的记录中有 name和age两个字段,我们也可以这样定义: ![](https://oss.showapi.com/doc/3105/117/badcbec566d84615a1abe8ff3e1e6899.png) 后面我们需要把表单post过来的name,age字段合成MySQL连接器认识的格式(一个JSON对象,就是在1.3小节中的insert_data字段),那如何合成呢,我们往下走。 好,我们接着往下走。 <br/><br/><br/><br/> ## 1.4.2 定义合成字段 ![](https://oss.showapi.com/doc/3105/117/974e2c7f36d04016919082ad2ee85039.png) <br/><br/><br/><br/> ## 1.4.3 查看效果 ![](https://oss.showapi.com/doc/3105/117/07da6f9f7a9b4a38ab63d1b548e8eeb5.png) <br/><br/><br/><br/> ## 1.5 查询列表 现在来验证一下刚才插入的数据是什么样子的。 ![](https://oss.showapi.com/doc/3105/117/6f8328824316456e9d05e357a1e0d504.png) <br/><br/><br/><br/> ## 1.6 查询单条记录 很多时候只想查询单条记录,比如通过id获取,我们看下怎么操作: ![](https://oss.showapi.com/doc/3105/117/198c73f3ae8446b2811d076e48192ba3.png) <br/><br/><br/><br/> ## 1.7 查询单条记录(高级用法) 采用【合成字段配置】的方法,可以实现很多用法。 以上小节为例: ![](https://oss.showapi.com/doc/3105/117/fe32f8829c4c465b97324051738fc174.png) 您可能会想,我能不能只输入一个id参数就能查询呢?像table、fields、where、where_param、order_by这些我一个也不想见到! 可以的,我们来看怎么做。 首先,按照您的想法,只要客户端输入id参数,那我们这样定义: ![](https://oss.showapi.com/doc/3105/117/8e80fe9dbefa45859b2a35762e8c4dfc.png) 客户端看不到table、fields、where、where_param、order_by这些参数,并不代表MySQL连接器胃口不好,不吃它们了。我们还是得把这些参数喂给连接器,怎么传呢?看下图 ![](https://oss.showapi.com/doc/3105/117/2377e06c03614433b0f4c5643360813d.png) 其中合成传入了table和where字段,这是因为MySql的select_one连接器对table字段是必选的,其他可选,如下图: ![](https://oss.showapi.com/doc/3105/117/eeb3adc8d3a84a2486fcf0a608201dc7.png) 我们在合成字段时,需要合成哪些字段,可以参照MySQL连接器通用模板里需要的参数。 <br/><br/><br/><br/> ## 1.8 修改记录 修改操作当然也是必不可少,操作也很简单。 ![](https://oss.showapi.com/doc/3105/117/4635f26473d64e9287582c1a514fa3c7.png) 好了,刚才更新成功,我们来看看更新结果,那就再查一次: ![](https://oss.showapi.com/doc/3105/117/c183439301d044b6b909dce414a43785.png) <br/><br/><br/><br/> ## 1.9 删除记录 删除记录的操作大同小异。 ![](https://oss.showapi.com/doc/3105/117/962aaca88bf044b28d2d94be7478ad60.png) <br/><br/><br/><br/> ## 1.10 分页查询 待编写。。 <br/><br/><br/><br/> ## 1.11 强大的功能-自定义sql语句 假如我们一个很长的sql语句,涉及子查询、联合查询等,中间只要传入几个变量,能不能实现呢? 答案是可以的,我们可以使用几乎万能的MySql连接器的【自定义sql语句】功能。操作顺如下: ### 第1步:配置连接 ![](https://oss.showapi.com/doc/3105/117/5ffd06ef35ed483bbcad9ae71775c191.png) <br/><br/><br/><br/> ### 第2步:配置req请求 ![](https://oss.showapi.com/doc/3105/117/47d4dfe2d56e450388df18a7ddd74c67.png) <br/><br/><br/><br/> ### 第3步:进行测试 ![](https://oss.showapi.com/doc/3105/117/9d7a8fc182394aa7ac0a3592821ac546.png) <br/><br/> 客户端完全看不到sql语句的样子,它只需要知道输入参数id即可。 # 2. 用java操作MySQL(和易源操作进行对比) 先制作一个工具类: ```java public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; private static Connection conn = null; static{ try { //1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 获得数据库连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection(){ //后续需要自己关闭链接 return conn; } public static void close(Statement stmt, Connection conn) throws Exception { if (stmt != null) { stmt.close(); if (conn != null) { conn.close(); } } } ``` ## 2.1 插入记录 ```java //增加 public void addStudent(Student g) throws SQLException { //获取连接 Connection conn = DbUtil.getConnection(); //sql String sql = "INSERT INTO student(user_name, sex, age, birthday )" +"values("+"?,?,?,? )"; //预编译 PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行 //传参 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setString(4, g.getBirthday()); //执行 ptmt.execute(); DbUtil.close(ptmt,conn); } ``` ## 2.2 查询列表 ```java public List<Student> query() throws SQLException { Connection conn = DbUtil.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM student"); List<Student> list = new ArrayList<Student>(); Student stu = null; while(rs.next()){ list = new Student(); list.setUser_name(rs.getString("user_name")); list.setAge(rs.getInt("age")); list.add(list); } DbUtil.close(stmt,conn); return list; } ``` ## 2.3 查询单条记录 ```java public Student get(){ Student stu = null; //获取连接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "select * from student where id=?"; //预编译SQL,减少sql执行 PreparedStatement ptmt = conn.prepareStatement(sql); //传参 ptmt.setInt(1, id); //执行 ResultSet rs = ptmt.executeQuery(); while(rs.next()){ stu = new Student(); stu.setId(rs.getInt("id")); stu.setUser_name(rs.getString("user_name")); stu.setAge(rs.getInt("age")); stu.setSex(rs.getInt("sex")); stu.setBirthday(rs.getString("birthday")); stu.setEmail(rs.getString("email")); } DbUtil.close(ptmt,conn); return stu; } ``` ## 2.4 修改记录 ```java public void updateStudent(){ //获取连接 Connection conn = DbUtil.getConnection(); //sql String sql = "UPDATE Stdudent" + " set user_name=?, sex=?, age=?, birthday=?, email=? "+ " where id=?"; //预编译 PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行 //传参 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setDate(4, g.getBirthday()); ptmt.setInt(5, g.getId()); //执行 ptmt.execute(); DbUtil.close(ptmt,conn); } ``` ## 2.5 删除记录 ```java public void delStudent(){ //获取连接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "delete from student where id=?"; //预编译SQL,减少sql执行 PreparedStatement ptmt = conn.prepareStatement(sql); //传参 ptmt.setInt(1, id); //执行 ptmt.execute(); DbUtil.close(ptmt,conn); } ``` ## 2.6 分页查询 分页查询比较复杂,以下使用hibernate代码进行演示。如果使用纯sql,操作过程会更繁杂。 ```java public PageBean searchByHQL(final String hql, final Object para[], final int page,final int pageSize) { String str = hql; int index = str.indexOf("order by"); if (index != -1) str = str.substring(0, index); //从原hql语句中截除掉order by index = str.indexOf("from"); if (index != -1) str = str.substring(index); //以下使用hibernate,根据传入的参数组para,生成sql语句,获取总条目数 List allNumList = hibernateTemplate .find("select count(*) " + str, para); //总条目数 int allNum = Integer.parseInt(allNumList.get(0).toString()); final int maxResult = pageSize; //查询结果列表 List allList = (List) hibernateTemplate .execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(hql); q.setFirstResult((page - 1) * maxResult); q.setMaxResults(maxResult); if (para != null) { for (int i = 0; i < para.length; i++) { q.setParameter(i, para[i]); } } return q.list(); } }); int allPage = 0; int temp = allNum; if (allNum % maxResult == 0) allPage = allNum / maxResult; else allPage = allNum / maxResult + 1; //将查询结果封装到pagebean中 PageBean pageBean = new PageBean(temp, allPage, page, allList, maxResult); return pageBean; } ``` 还有各种其他语言,不再举例,其流程和java相差不大。 # 3. 总结 用易源操作数据库非常简单,而且是多种数据库的http操作类似,这样您不需要再了解各种数据库驱动程序的用法,就算是开发新手也能以最快的速度操作数据库,以完成您的核心业务。 总体来说,使用易源连接器操作MySQL有以下优点: 1. 把数据库操作HTTP化,使用门槛几乎降低为0。 2. 连接器自带连接池,可以保证极高性能(Http的损耗相对于业务处理的时间来说可以忽略)。 3. 采用sql语句中挖空变量,从客户端传值的方式,极大地便利了业务端API的建立。 4. 权限容易控制,有日志,有监控,有报警。