mybatis最小环境

上一期我们聊了如何使用Java制作爬虫,爬取的数据需要进行存储。我们可选mybatis作为存储的框架,而如果每次都从0开始,效率太慢。怎么办?先建一个最小mybatis的可运行环境,以后都基于这个小项目进行迭代开发,效率就能提高。


先新建一个maven的java项目,然后加入或修改这6个文件即可。后面这个最小环境就可以复用了。

准备工作

新建一个mysql库叫test,新建一个表:

CREATE TABLE `item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `creator` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


1.pom.xml

依赖mybatis,mysql,

写代码依赖gson,lombok

其它两个包是mybatis需要的

<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.2</version>
	</dependency>
	<!--javassist与ognl是mybatis需要的  -->
	<dependency>
		<groupId>org.javassist</groupId>
		<artifactId>javassist</artifactId>
		<version>3.24.1-GA</version>
		<scope>compile</scope>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>ognl</groupId>
		<artifactId>ognl</artifactId>
		<version>3.2.10</version>
		<scope>compile</scope>
		<optional>true</optional>
	</dependency>
	
	 <dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.16</version>
		<!--
		这个版本服务器tomcat会报错 
		<version>1.18.8</version>
		-->
		<!-- 1.16.16 mvn clean package命令在win10,jdk1.8下不好用 -->
	</dependency>
	
	<dependency>
		<groupId>com.google.code.gson</groupId>
		<artifactId>gson</artifactId>
		<version>2.7</version>
	</dependency>
	
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.18</version>
	</dependency>
</dependencies>


2.准备mybatis-config.xml文件

<?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="cacheEnabled" value="true"/>
		
		<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		
		<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
		<setting name="aggressiveLazyLoading" value="false"/>
		
		<!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->
		<setting name="multipleResultSetsEnabled" value="true"/>
		
		<!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
		<setting name="useColumnLabel" value="true"/>
		
		<!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false  -->
		<setting name="useGeneratedKeys" value="false"/>
		
		<!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部  -->  
		<setting name="autoMappingBehavior" value="PARTIAL"/>
		
		<!-- 这是默认的执行类型  (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新)  -->
		<setting name="defaultExecutorType" value="SIMPLE"/>
		
		<!-- 使用驼峰命名法转换字段。 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		
		<!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION"/>
		
        <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
        <setting name="jdbcTypeForNull" value="NULL"/>
		
	</settings>
	<environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true"/>
        <property name="username" value="root"/>
        <property name="password" value="xx"/>
      </dataSource>
    </environment>
  </environments>
	<mappers>  
		<mapper resource="Item.xml"/>
	</mappers> 
	
	
	
</configuration>


3.准备xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="net.highersoft.mybatis.ItemMapper">

	<insert id="addInfo" parameterType="net.highersoft.mybatis.InfoEntry">
		insert into item(name,create_time,creator) values(#{name},#{createTime},#{creator})
	</insert>
	
	
	<select id="selectLastInfo" resultType="net.highersoft.mybatis.InfoEntry">
	select * from item order by create_time desc limit 10
	</select>
</mapper>
4.准备Mapper类

public interface ItemMapper {
	
	void addInfo(InfoEntry entry);
	
	List<InfoEntry> selectLastInfo();
}
5.准备实体类

package net.highersoft.mybatis;

import java.util.Date;

import com.google.gson.Gson;

import lombok.Data;

//贴子
@Data
public class InfoEntry {
	//主键
	private int id;
	//文件名
	private String name;
	//创建者
	private String creator;
	//创建时间
	private Date createTime;
	
}
6.准备测试类

package net.highersoft.mybatis;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import com.google.gson.Gson;



public class DBService {
private static SqlSessionFactory sqlSessionFactory;
	
	
static {
	try {
		init();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
	public static void init() throws IOException {
		
		UnpooledDataSource dataSource = new UnpooledDataSource();
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		Environment environment = new Environment("development", transactionFactory, dataSource);
		Configuration configuration = new Configuration(environment);
		
		configuration.addMapper(ItemMapper.class);
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
	}
	public static void add(List<InfoEntry> paramList) {
		SqlSession session = sqlSessionFactory.openSession(); 
		
		
		ItemMapper mapper = session.getMapper(ItemMapper.class);
		for(InfoEntry param:paramList) {
			mapper.addInfo(param);
		}
		session.commit();
		session.close();
	
	}
	public static List<InfoEntry> selectLastInfo( ) {
		try (SqlSession session = sqlSessionFactory.openSession()) {
			return session.getMapper(ItemMapper.class).selectLastInfo();
		}
	}
	
	public static void main(String args[]) {
		System.out.println(new Gson().toJson(selectLastInfo()));
	}
}



文/程忠 浏览次数:0次   2022-11-03 17:25:29

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑