Browse Source

原生mybatis简单使用

nieqiuqiu 6 năm trước cách đây
mục cha
commit
4eb1b37ebf

+ 70 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/MybatisTest.java

@@ -0,0 +1,70 @@
+package com.baomidou.mybatisplus.test;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.test.h2.entity.enums.AgeEnum;
+import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper;
+import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.jdbc.ScriptRunner;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.h2.Driver;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+
+/**
+ * 原生Mybatis测试
+ *
+ * @author nieqiurong 2019/2/27.
+ */
+@ExtendWith(MockitoExtension.class)
+class MybatisTest {
+
+    @Test
+    void test() throws IOException, SQLException {
+        DruidDataSource dataSource = new DruidDataSource();
+        dataSource.setDbType(DbType.H2.getDb());
+        dataSource.setDriver(new Driver());
+        dataSource.setUsername("sa");
+        dataSource.setPassword("");
+        dataSource.setValidationQuery("select 1");
+        dataSource.setUrl("jdbc:h2:mem:test;MODE=mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
+        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
+        SqlSessionFactory factory = new MybatisSqlSessionFactoryBuilder().build(reader);
+        SqlSession sqlSession = factory.openSession(dataSource.getConnection());
+        Connection connection = dataSource.getConnection();
+        ScriptRunner scriptRunner = new ScriptRunner(connection);
+        scriptRunner.runScript(Resources.getResourceAsReader("h2/user.ddl.sql"));
+        H2UserMapper mapper = sqlSession.getMapper(H2UserMapper.class);
+        Assertions.assertEquals(mapper.myInsertWithNameVersion("test", 2), 1);
+        Assertions.assertEquals(mapper.mySelectMaps().size(), 1);
+        Assertions.assertEquals(mapper.insert(new H2User("test")), 1);
+        Assertions.assertEquals(mapper.selectCount(new QueryWrapper<H2User>().lambda().eq(H2User::getName, "test")), 2);
+        Assertions.assertEquals(mapper.delete(new QueryWrapper<H2User>().lambda().eq(H2User::getName, "test")), 2);
+        H2User h2User = new H2User(66L, "66666", AgeEnum.THREE, 666);
+        Assertions.assertEquals(mapper.insert(h2User), 1);
+        h2User.setName("7777777777");
+        H2User user = mapper.selectById(66L);
+        Assertions.assertNotNull(user);
+        Assertions.assertEquals(user.getAge(), AgeEnum.THREE);
+        Assertions.assertEquals(user.getAge().getValue(), AgeEnum.THREE.getValue());
+        Assertions.assertNotNull(user.getTestType());
+        Assertions.assertEquals(mapper.updateById(new H2User(66L, "777777")), 1);
+        Assertions.assertEquals(mapper.deleteById(66L), 1);
+        Assertions.assertEquals(mapper.insert(h2User), 1);
+        Assertions.assertEquals(mapper.delete(new QueryWrapper<>()), 1);
+    }
+
+}

+ 1 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java

@@ -45,7 +45,7 @@ public class MybatisPlusConfig {
     public SqlSessionFactory sqlSessionFactory(DataSource dataSource, ResourceLoader resourceLoader, GlobalConfig globalConfiguration) throws Exception {
         MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
         sqlSessionFactory.setDataSource(dataSource);
-//        sqlSessionFactory.setConfigLocation(resourceLoader.getResource("classpath:mybatis-config.xml"));
+//        sqlSessionFactory.setConfigLocation(resourceLoader.getResource("classpath:mybatis-config-object-factory.xml"));
         sqlSessionFactory.setTypeAliasesPackage("com.baomidou.mybatisplus.test.h2.entity.persistent");
         MybatisConfiguration configuration = new MybatisConfiguration();
 //        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);

+ 1 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisXmlConfig.java

@@ -22,7 +22,7 @@ public class MybatisXmlConfig {
         MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
         sqlSessionFactory.setDataSource(dataSource);
         sqlSessionFactory.setTypeAliasesPackage("com.baomidou.mybatisplus.test.h2.entity.persistent");
-        sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
+        sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config-object-factory.xml"));
         sqlSessionFactory.setTypeEnumsPackage("com.baomidou.mybatisplus.test.h2.entity.enums");
         return sqlSessionFactory.getObject();
     }

+ 15 - 0
mybatis-plus/src/test/resources/mybatis-config-object-factory.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+
+    <settings>
+        <setting name="mapUnderscoreToCamelCase" value="true"/>
+        <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
+    </settings>
+
+    <objectFactory type="com.baomidou.mybatisplus.test.reflection.ExampleObjectFactory">
+        <property name="someProperty" value="100"/>
+    </objectFactory>
+</configuration>

+ 6 - 5
mybatis-plus/src/test/resources/mybatis-config.xml

@@ -5,11 +5,12 @@
 <configuration>
 
     <settings>
-        <setting name="mapUnderscoreToCamelCase" value="true"/>
-        <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
+        <!-- //todo 设置默认枚举,在使用原生的时候,混合使用原生枚举的方式不是很好设置,暂时建议实体里面不混合使用原生枚举,只使用MP提供的实现接口或注解方式-->
+        <!-- //todo 考虑下将枚举的注册方式提到 MybatisConfiguration ??????-->
+        <setting name="defaultEnumTypeHandler" value="com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler"/>
     </settings>
 
-    <objectFactory type="com.baomidou.mybatisplus.test.reflection.ExampleObjectFactory">
-        <property name="someProperty" value="100"/>
-    </objectFactory>
+    <mappers>
+        <mapper class="com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserMapper"/>
+    </mappers>
 </configuration>