一:背景介绍
在项目开发的过程中,我们编写sql语句的时候通常不会考虑到我要编写的sql语句之前是不是有人写过或者是不是可以复用别人的sql语句。而是直接我用了什么业务就直接写一个对应的sql语句。甚至有的时候我们自己写了之后都不清楚了。这样就没有使代码进行复用,也会带来代码带以维护的问题。
二:思路&方案
1.编写通用的sql语句,使其满足百分之九十的sql语句。
2.让代码的复用性更高。减少后期代码的维护成本。
三:过程
1.项目结构
2.准备一个普通的maven项目,部署好mysql数据库
3.在项目中引入pom依赖
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
4.在db.properties配置文件中添加连接数据库的语句
driver=com.mysql.jdbc.Driver url=jdbc:mysql:服务器IP:3306/wzill?useSSL=false&;useUnicode=true;CharacterEncoding=UTF-8 username=数据库账号 password=数据库密码
5.编写MyBitis配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration mybatis的核心配置文件--> <configuration> <!--引入外部配置文件--> <properties resource="db.properties"/> <!--配置--> <settings> <!--标准日志工厂设置--> <setting name="logImpl" value="STDOUT_LOGGING"/> <!--显示的开启全局缓存--> <setting name="cacheEnabled" value="true"/> </settings> <!--可以给实体类取别名--> <typeAliases> <!--<typeAlias type="com.kuang.pojo.User" alias="User"/>--> <!--可以指定一个包名,MyBatis会在包名下面搜索需要的Java Bean--> <package name="com.wzl.CommonUse.pojo"/> </typeAliases> <!--environments 后面的s表示这是一个复数,可以编写多套环境 default表示默认的环境为development--> <environments default="development"> <!--编写一套环境 名称为configuration--> <environment id="development"> <!--jdbc的事务管理--> <transactionManager type="JDBC"/> <!--配置数据库相关数据--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <!--userSSL是一个按权连接 &是一个转移符 等同于and CharacterEncoding=utf-8可以保证输入数据库的数据不乱码--> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--绑定接口--> <mappers> <mapper class="com.wzl.CommonUse.dao.UserMapper"/> </mappers> </configuration>
6.编写Mysql配置类
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; //静态代码块:一旦初始化就加载 static{ try { //使用Mybatis第一步:获取sqlSessionFactory对象 //获取资源,直接读到mybatis-config.xml String resource = "mybatis-config.xml"; //需要用到输入流(InputStream) 把resource类加载进来 InputStream inputStream = Resources.getResourceAsStream(resource); //通过build把输入流加载进来 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession() { //openSession中有自动commit(提交)事务的方法,加上true就能实现 return sqlSessionFactory.openSession(true); } }
7.编写通用Update语句
<update id="updateUser"> update user <trim prefix="SET" suffixOverrides=","> <if test="userPojo.uid != null">uid = #{userPojo.uid}</if> <if test="userPojo.id != null">id = #{userPojo.id}</if> <if test="userPojo.name != null">name = #{userPojo.name}</if> <if test="userPojo.age != null">age = #{userPojo.age}</if> <if test="userPojo.username != null">username = #{userPojo.username}</if> <if test="userPojo.password != null">password = #{userPojo.password}</if> <if test="userPojo.email != null">email = #{userPojo.email}</if> <if test="userPojo.phone != null">phone = #{userPojo.phone}</if> <if test="userPojo.addr != null">addr = #{userPojo.addr}</if> <if test="userPojo.state != null">state = #{userPojo.state}</if> </trim> where state = 2 <if test="conditionParam.addr != null"> and addr = #{conditionParam.addr}</if> <if test="conditionParam.phone != null">and phone = #{conditionParam.phone}</if> <if test="conditionParam.name != null">and name = #{conditionParam.name}</if> <if test="conditionParam.age != null">and age = #{conditionParam.age}</if> <if test="conditionParam.username != null">and username = #{conditionParam.username}</if> <if test="conditionParam.password != null">and password = #{conditionParam.password}</if> </update>
这样我们在编写对于 user表中的数据进行更新的时候只需要这一个通用的语句就可以了。涉及到批量更新的话,还是需要新的sql语句的。相信通过不断的学习,我们也可以把批量的和单独的进行一个代码的复用。
8.项目启动类
public class Client{ @Test public void test(){ //获取数据库连接 SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //进行更新操作 UserPojo UserPojo1 = new UserPojo(); UserPojo UserPojo2 = new UserPojo(); //假删除某个课的某个班的所有信息 UserPojo1.setUsername("223667994"); UserPojo2.setUsername("bbb"); //进行调用 userMapper.updateUser(UserPojo1,UserPojo2); } }
四:总结
在写代码之前先去看一下项目中是否有类似的业务逻辑,是否有可以复用的代码。来减少我们做无用功。代码的复用对于我们后期对于项目维护的成本非常低。