Mark关于mybatis的一些简单东西
2016-08-15 20:24
531 查看
来公司没多久就去培训了2周,最近两周回来做一个日志存储系统,数据库连接方面不是用的是mybatis,它简化了sql语句,使得我们不需要再大量的拼接字符串了。
mybatis上手其实挺简单的,首先需要一个mybatis-config.xml配置文件,在这个配置文件中我们主要配置了数据源信息以及对应的包含sql语句的map映射的xml。放代码。
事实上,这里也可以通过配置文件来存放数据源信息,例如db.properties配置文件这样写
mybatis-config.xml配置文件就可以这样写:
同样,这里也可以配置多个数据源,有个链接“mybatis如何配置使用多个数据源?”,这里是在同一个mybatis-config.xml中配置多个数据源的,同样,我们也可以创建多个mybatis-config.xml来配置数据源,每一个配置文件对应一个数据源及其对应的数据库表结构对象以及map映射文件。
map映射文件即为上面配置文件中的userMapper.xml,它的路径也即上面所述的路径,必须一致。同样放代码。
这里要说的有三点:
第一是parameterType对应的是参数类型,这里可以写mybatis-config.xml中的别名,也可以直接写全,即把路径都包含在内;
第二是在sql语句中的jdbcType,是对应数据表字段的类型,这里不写的话,如果插入的为null就会出错,其中number类型对应的是NUMERIC;
第三是namespace中的路径是该UserMapper.xml对应的mapper接口类,也即UserMapper.java,必须对应一直,即在UserMapper.xml中有几个sql方法那么在UserMapper.java中就应该有几个,否则不会起作用,同样方法名跟xml中的id要一致。放代码。
那么怎么调用呢,最后的代码
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应该就这些,最后数据库的插入可以用批量的方式,效率会提高一些,同时加上多线程。
相关文章推荐
- c++关于排序与检索的一些简单东西
- 关于MD5的一些东西
- 一些关于注册表有用的东西
- 关于机器人足球的一些东西
- 从网络上找到的一些关于软件工程的东西
- 关于JAVA-一些要记住的东西
- 关于Delegate的一些东西...
- 虽然分了Delphi的目录,但是没有写一点关于Delphi的东西,这两天写了一些Delphi的东西,就顺便写到BLOG上吧
- 最新想写一些关于Linux的东西
- 关于OpenPOP/OpenSMTP/Mail.Net的一些东西……
- 虽然分了Delphi的目录,但是没有写一点关于Delphi的东西,这两天写了一些Delphi的东西,就顺便写到BLOG上吧
- 关于FreeTextBox 1.63/2.0.7/3.0RC/3.0的一些东西
- 看到关于Zope的一些东西
- 关于C++的一些细节[二:简单变量]
- 关于堆,栈的一些东西!
- 关于MD5的一些东西
- 关于delphi的网络组件indy的一些东西
- Google的秘密,对Google感兴趣,所以放上来一些关于Google的东西
- 关于数据绑定的一些东西
- 虽然分了Delphi的目录,但是没有写一点关于Delphi的东西,这两天写了一些Delphi的东西,就顺便写到BLOG上吧