本文说明如何使用Mybatis执行我自定义输入的SQL语句。
需要的mybaits文件包括:配置文件(mybatis-config-dao.xml 和 jdbc.properties)、接口文件(ISqlMapper.class)、xml文件 (sqlMapper.xml)、工具类(MybatisUtils.class)。
依赖包:
1 <dependency> 2 <groupId>org.mybatis</groupId> 3 <artifactId>mybatis</artifactId> 4 <version>3.4.6</version> 5 </dependency> 6 7 <dependency> 8 <groupId>mysql</groupId> 9 <artifactId>mysql-connector-java</artifactId> 10 <version>5.1.47</version> 11 </dependency>
mybatis配置文件:
mybatis-config-dao.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--从外部配置文件导入jdbc信息--> 7 <properties resource="config/jdbc.properties"></properties> 8 9 <environments default="development"> 10 <environment id="development"> 11 <transactionManager type="JDBC"/> 12 <dataSource type="POOLED"> 13 <property name="driver" value="${driver}"/> 14 <property name="url" value="${url}"/> 15 <property name="username" value="${username}"/> 16 <property name="password" value="${password}"/> 17 </dataSource> 18 </environment> 19 </environments> 20 21 <!--指定映射资源文件--> 22 <mappers> 23 <mapper resource="mapper/shelby/userMapper.xml"/> 24 <mapper resource="mapper/shelby/sqlMapper.xml"/> 25 </mappers> 26 27 </configuration>
jdbc.properties
# jdbc连接信息 driver=com.mysql.jdbc.Driver url=jdbc:mysql://10.15.1.232:3306/maserati_x??zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 username=root password=
接口文件 ISqlMapper.class
1 package testTraffic.mapper.shelby; 2 3 import java.util.List; 4 import java.util.Map; 5 6 public interface ISqlMapper { 7 8 Integer insert(String statement); 9 10 Integer delete(String statement); 11 12 Integer update(String statement); 13 14 List<Map<String, Object>> selectList(String statement); 15 16 String selectOne(String statement); 17 }
sqlMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 4 <mapper namespace="testTraffic.mapper.shelby.ISqlMapper"> 5 <insert id="insert" parameterType="java.lang.String"> 6 ${value} 7 </insert> 8 9 <select id="selectList" parameterType="java.lang.String" resultType="java.util.HashMap" useCache="false"> 10 ${value} 11 </select> 12 13 <select id="selectOne" parameterType="java.lang.String" resultType="java.lang.String" useCache="false"> 14 ${value} 15 </select> 16 17 <delete id="delete" parameterType="java.lang.String"> 18 ${value} 19 </delete> 20 21 <update id="update" parameterType="java.lang.String"> 22 ${value} 23 </update> 24 25 </mapper>
测试代码:
1 package testTraffic.testDemo; 2 3 import org.apache.ibatis.session.SqlSession; 4 import org.apache.logging.log4j.LogManager; 5 import org.apache.logging.log4j.Logger; 6 import org.junit.Test; 7 import testTraffic.mapper.shelby.ISqlMapper; 8 import testTraffic.mapper.shelby.UserMapper; 9 import testTraffic.utils.MybatisUtils; 10 11 import java.util.List; 12 13 /** 14 * @Auther:GongXingRui 15 * @Date:2019/1/24 16 * @Description: 17 **/ 18 public class TestMybatisDemo { 19 private static Logger logger = LogManager.getLogger(TestMybatisDemo.class); 20 21 // 直接执行SQL语句 22 @Test 23 public void testMybatisSelectOne() { 24 String sql = "select user_name from t_admin_user where id = 2"; 25 ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class); 26 String name = sqlMapper.selectOne(sql); 27 logger.info(name); 28 } 29 30 // 多个查询 31 @Test 32 public void testMybatisSelectList() { 33 String sql = "select user_name from t_admin_user"; 34 ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class); 35 List list = sqlMapper.selectList(sql); 36 logger.info(list); 37 } 38 39 // 删除与插入 40 @Test 41 public void testMybatisDeleteInsert() { 42 ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class); 43 44 String deleteSql = "delete from t_admin_user WHERE user_name = 'testuser';"; 45 String insertSql = "insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`) VALUES( null,'testuser','testuser123','0','2019-01-21 19:43:58','2019-01-22 19:44:03');"; 46 int n = sqlMapper.delete(deleteSql); 47 logger.info("删除数据:" + n); 48 n = sqlMapper.insert(insertSql); 49 logger.info("插入数据:" + n); 50 // MybatisUtils.getSession().commit(); 51 } 52 53 }
自己封装的Mybatis工具类(MybatisUtils.class)
1 package testTraffic.utils; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.SqlSession; 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 import java.io.IOException; 9 import java.io.InputStream; 10 11 /** 12 * @Description: 生成mybatis的session对象 13 **/ 14 public class MybatisUtils { 15 private static String resource = "config/mybatis-config-dao.xml"; 16 private static SqlSessionFactory sqlSessionFactory = null; 17 private static SqlSession session = null; 18 19 20 private static void init() { 21 try { 22 InputStream inputStream = Resources.getResourceAsStream(resource); 23 // 创建工厂 24 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 25 // 创建session对象 26 session = sqlSessionFactory.openSession(true); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 32 public static SqlSession getSession() { 33 if (session == null) { 34 init(); 35 } 36 return session; 37 } 38 39 public static void close() { 40 if (session != null) { 41 session.close(); 42 session = null; 43 } 44 } 45 46 public static <T> T getMapper(Class<T> tClass) { 47 if (session == null) { 48 init(); 49 } 50 return session.getMapper(tClass); 51 } 52 53 public static void commit() { 54 if (session != null) { 55 session.commit(); 56 } 57 } 58 59 60 }