Mark关于mybatis的一些简单东西

        来公司没多久就去培训了2周,最近两周回来做一个日志存储系统,数据库连接方面不是用的是mybatis,它简化了sql语句,使得我们不需要再大量的拼接字符串了。

        mybatis上手其实挺简单的,首先需要一个mybatis-config.xml配置文件,在这个配置文件中我们主要配置了数据源信息以及对应的包含sql语句的map映射的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>

	<!-- 实体类,简称 -设置别名 -->
	<typeAliases>
		<!-- <typeAlias alias="User" type="com.tgb.model.User" /> -->
		<typeAlias alias="LogHistory" type="com.tgb.model.LogHistory" />
	</typeAliases>
	<!-- 实体接口映射资源 -->
	
	<!-- <properties resource="db.properties"/> -->
	<!-- 配置mybatis数据源和环境 -->
	<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://127.0.0.1::3306/db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	
	
	<!--
		说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml
	-->
	<mappers>
		<mapper resource="com/tgb/mapper/userMapper.xml" />
	</mappers>

</configuration>  


事实上,这里也可以通过配置文件来存放数据源信息,例如db.properties配置文件这样写

db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1::3306/db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
db.username=root
db.password=root

mybatis-config.xml配置文件就可以这样写:
<properties resource="db.properties"/>
	<!-- 配置mybatis数据源和环境 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${db.driverClassName}" />
				<property name="url" value="${db.url}" />
				<property name="username" value="${db.username}" />
				<property name="password" value="${db.password}" />
			</dataSource>
		</environment>
	</environments>

同样,这里也可以配置多个数据源,有个链接“mybatis如何配置使用多个数据源?”,这里是在同一个mybatis-config.xml中配置多个数据源的,同样,我们也可以创建多个mybatis-config.xml来配置数据源,每一个配置文件对应一个数据源及其对应的数据库表结构对象以及map映射文件。

     map映射文件即为上面配置文件中的userMapper.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">
<!-- 
	namespace:必须与对应的接口全类名一致
	id:必须与对应接口的某个对应的方法名一致
	
 -->
<mapper namespace="com.tgb.mapper.UserMapper">
		
	<insert id="insert2log_khyw_busi_today" parameterType="com.tgb.model.LogHistory">
		insert into log_khyw_busi_today
		(ID, CREATETIME,IN_VALUE, OUT_VALUE, 
		BUSI_PART, FUNC_NO, STATUS, IPADDR, MAC, IDNO, MOBILE, HOSTIPADDR,
		FUNDID, CUSTID, SYSTEM_PART, CIF_ACCOUNT, EXT1, EXT2, EXT3, EXT4) values
		(seq_log_khyw_busi_today.NEXTVAL, 
		#{createTime,jdbcType=DATE}, 
		#{in_value,jdbcType=VARCHAR}, 
		#{out_value,jdbcType=VARCHAR},
		#{busi_part,jdbcType=VARCHAR}, 
		#{func_no,jdbcType=VARCHAR}, 
		#{status,jdbcType=NUMERIC}, 
		#{ipAddr,jdbcType=VARCHAR},
		#{mac,jdbcType=VARCHAR}, 
		#{idno,jdbcType=VARCHAR}, 
		#{mobile,jdbcType=VARCHAR}, 
		#{hostIpAddr,jdbcType=VARCHAR}, 
		#{fundid,jdbcType=VARCHAR}, 
		#{custid,jdbcType=VARCHAR}, 
		#{systemPart,jdbcType=VARCHAR}, 
		#{cif_account,jdbcType=VARCHAR}, 
		#{ext1,jdbcType=VARCHAR}, 
		#{ext2,jdbcType=VARCHAR}, 
		#{ext3,jdbcType=VARCHAR}, 
		#{ext4,jdbcType=VARCHAR})
	</insert>
	
	
	<!-- <insert id="insertLogHistory2operate_history" parameterType="java.util.List">
		INSERT INTO operate_history(ID, OPERATE_TYPE,DICTIONARY_ID, USER_ID, 
		UPDATE_CONTENT, CREATE_DATE, CREATE_USER, EXT1, EXT2, EXT3, EXT4, OPERATE_NAME,
		EXT5, EXT6, CONTENT, IDNO, MOBILE)
		(
		<foreach collection="list" index="" item="LogHistory"
			separator="union all">
			select
			#{LogHistory.id}, #{LogHistory.operateType}, #{LogHistory.dictionaryId}, #{LogHistory.userId},
			#{LogHistory.updateContent}, #{LogHistory.createDate}, #{LogHistory.createUser}, #{LogHistory.ext1},
			#{LogHistory.ext2}, #{LogHistory.ext3}, #{LogHistory.ext4}, #{LogHistory.operateName}, #{LogHistory.ext5}, 
			#{LogHistory.ext6}, #{LogHistory.content}, #{LogHistory.idno}, #{LogHistory.mobile}
			from dual
		</foreach>
		)
	</insert> -->
	
</mapper>

这里要说的有三点:

第一是parameterType对应的是参数类型,这里可以写mybatis-config.xml中的别名,也可以直接写全,即把路径都包含在内;

第二是在sql语句中的jdbcType,是对应数据表字段的类型,这里不写的话,如果插入的为null就会出错,其中number类型对应的是NUMERIC;

第三是namespace中的路径是该UserMapper.xml对应的mapper接口类,也即UserMapper.java,必须对应一直,即在UserMapper.xml中有几个sql方法那么在UserMapper.java中就应该有几个,否则不会起作用,同样方法名跟xml中的id要一致。放代码。

public interface UserMapper {

	/**
	 * 插入日志到log_khyw_busi_today表中
	 * @param log
	 * @return
	 */
	int insert2log_khyw_busi_today(LogHistory log);
}
最后一个非常重要的一点就是SqlSessionFactory,用mybatis需要构建一个session工厂,这个工厂只是是单例模式,也就是一个数据源只能生成一个对象,否则会爆掉数据库连接。放代码:
public class SessionFactoryJK {

	private static SqlSessionFactory sessionFactoryJK;
	public static SqlSessionFactory getSqlSessionFactory() throws IOException {
		
		String resource = "config/mybatis-config.xml";
	
		InputStream inputStream = Resources.getResourceAsStream(resource);
		if(sessionFactoryJK == null) {
			sessionFactoryJK = new SqlSessionFactoryBuilder().build(inputStream);
		}		
		return sessionFactoryJK;
	}
}

那么怎么调用呢,最后的代码
   SqlSessionFactory sessionFactory = null;
  SqlSession session = null;
   sessionFactory = SessionFactoryJK.getSqlSessionFactory();
  session = sessionFactory.openSession();
   UserMapper mapper = session.getMapper(com.tgb.mapper.UserMapper.class);
   result = mapper.insert2log_khyw_busi_today(log);
   session.commit();
  session.close();
恩,简单的mark应该就这些,最后数据库的插入可以用批量的方式,效率会提高一些,同时加上多线程。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值