mybatis(3.3.1version)是一个比较轻量级的O/R Mapping框架,跟Hibernate对比安装和配置都要简单许多。将mybatis.jar引入到项目中即可。安装之后下面的工作就是要配置相关文件。mybatis配置文件主要包含两个部门一个是核心配置文件也可称为主配文件,另一部分的配置就是若干个Mapper配置文件。
mybatis主配置文件,配置项标签要有序,顺序如下
( properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?,environments?,databaseIdProvider?,mappers?)
<?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> <properties resource="conf/datasource/jdbc.properties"></properties> <settings> <!-- 配置开启日志 Log4j --> <setting name="logImpl" value="LOG4J"/> <!-- <setting name="logImpl" value="SLF4J"/> --> </settings> <typeAliases> <typeAlias alias="Group" type="org.lian.domain.Group"/> <package name="org.lian.domain"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="conf/mybatis/mapper/GroupMapper.xml"/> <mapper resource="conf/mybatis/mapper/MusicMapper.xml"/> </mappers> </configuration>
下面是*Mapper.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="org.lian.domain.Music"> <!-- <resultMap id="musicResult" type="Music"> <id property="groupId" column="group_id"/> <result property="groupName" column="group_name"/> </resultMap> --> <!-- <select id="selectGroup" parameterType="String" resultType="Group"> select group_id ,group_name from t_group where group_id = #{group_id} </select> --> <!-- 开启二级缓存 Music domain类 Javabean对象要实现Serializable接口 --> <!-- <cache/> --> <sql id="musicColumns"> id, name, singer, author, composer, album, duration, style </sql> <select id="selectMusic" parameterType="String" resultType="Music"> select <include refid="musicColumns"></include> from t_music where id = #{musicId} </select> </mapper>
domain实体类Music.java,省略setter和getter方法,这里采用了mybatis注解,来简化typeAliases配置。
@SuppressWarnings("serial") @Alias("Music") public class Music implements Serializable { private String id; /** * 名称 */ private String name; /** * 歌手 */ private String singer; /** * 专辑 */ private String album; /** * 歌曲时长 */ private String duration; /** * 作词 */ private String author; /** * 作曲 */ private String composer; /** * 曲风 */ private String style; }
上面工作将jdomain类Javabean对象和mybatis映射上,下面工作如何来获取SqlSessionFactory和SqlSession对象,这是我们写dao层要使用到最重要的两个对象。
public class MyBatisUtil { private static final SqlSessionFactory sqlSessionFactory = buildSqlSessionFactory(); private static SqlSessionFactory buildSqlSessionFactory() { String resource = "conf/mybatis/mybatis_core.xml"; InputStream inputStream; try { inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); return sqlSessionFactory; } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(); } } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } }
dao层通过SqlSession对象来访问数据库
public class MusicDaoImpl implements MusicDao { @Override public Music selectMusicById(String musicId) { StringBuilder statement = new StringBuilder(); statement.append(namespace); statement.append("selectMusic"); SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(); try { // 这里使用泛型 Music music = sqlSession.selectOne(statement.toString(), musicId); return music; } finally { sqlSession.close(); } } }