Mybatis学习总结(二) 搭建

快速搭建Mybatis环境:

首先创建任意一个maven项目,如何创建不在本文讨论范围,请参考作者其他博客。

1. 引入Mybatis所需的包

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>${mybatis.version}</version>
	</dependency>
<!-- 导入Mysql数据库链接jar包 -->    
<dependency>    
        <groupId>mysql</groupId>    
        <artifactId>mysql-connector-java</artifactId>    
        <version>${mysqlcon.version}</version>    
 </dependency>  

2. 配置mybatis.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>
	<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:3306/db_nba?allowMultiQueries=true" /><!-- allowMultiQueries 允许一次性执行多个SQL,否则在一个映射文件中执行多个条SQL时会报格式错误 -->
				<property name="username" value="root" />
				<property name="password" value="123456" />
				<property name="defaultAutoCommit" value="true"/> <!-- 配置事务自动提交,但是没有用 -->
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="resources/mybatis/PlayerMapper.xml" />
	</mappers>
</configuration>


3.通过XML配置文件获取SqlSession

创建MySqlSessionFactory类,通过resource获取sqlSessionFactory

/**
 * 
 */
package com.jnk.mybatis.practise.service.factory;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * @author Lenovo
 *
 */
public class MySessionFactory
{
	// 配置文件路径
	/*
	 * private static final String CONFIG_FILE = IConstant.APP_ROOT +
	 * IConstant.FILE_SEPT + "src" + IConstant.FILE_SEPT + "main" +
	 * IConstant.FILE_SEPT + "java" + IConstant.FILE_SEPT + "mybatis.xml";
	 */
	private static SqlSession sqlSession;

	static
	{
		try
		{
			/*
			 * 使用mybatis提供的资源加载器加载配置文件,同时加载Mapper文件 如果报错 Resource not found
			 * 说明配置文件没有放到source 下
			 * 参考:http://blog.csdn.net/JJ_nan/article/details/63685929
			 */
			Reader reader = Resources.getResourceAsReader("mybatis.xml");
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
			sqlSession = factory.openSession(true); // true
													// 参数代表自动提交事务,否则需要手动管理事务,不然更改数据库的操作不能COMMIT
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	public static <T> T getSqlSession(Class<T> T)
	{
		return sqlSession.getMapper(T);
	}
}

4. 配置Mapper.java接口


public interface IPlayerMapper
{
	/**
	 * 根据ID读取球员信息
	 * 
	 * @param id
	 *            球员ID
	 * @return 某个球员信息
	 */
	PlayerEntity queryPlayerInfo(@Param("id") int id);
}

4. 配置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="com.jnk.mybatis.practise.service.mapper.IPlayerMapper">
	<resultMap type="com.jnk.mybatis.practise.service.entity.PlayerEntity"
		id="playerInfo">
		<result property="id" column="ID" />
		<result property="pNameCn" column="P_NAME_CN" />
		<result property="pNameEn" column="P_NAME_EN" />
		<result property="pNo" column="P_NO" />
		<result property="birthDay" column="BIRTH_DAY" />
		<result property="age" column="AGE" />
		<result property="teamId" column="TEAM_ID" />
	</resultMap>
	<sql id="commonPlayerInfo">
		select
		ID,
		P_NAME_CN,
		P_NAME_EN,
		P_NO,
		BIRTH_DAY,
		YEAR(CURRENT_DATE()) - YEAR(BIRTH_DAY) as AGE,
		TEAM_ID
		from tbl_player
	</sql>
	<select id="queryPlayerInfo" resultMap="playerInfo">
		<include refid="commonPlayerInfo"></include>
		where id = #{id}
	</select>
</mapper>

5. 创建测试数据库

DROP DATABASE IF EXISTS db_nba;
CREATE DATABASE db_nba CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;

USE db_nba;
DROP TABLE IF EXISTS tbl_zone;
CREATE TABLE tbl_zone(
	 `ZONE_ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	 `ZONE_NAME_CN` VARCHAR(32) NOT NULL COMMENT '分区中文名',
	 `ZONE_NAME_EN` VARCHAR(32) NOT NULL COMMENT '分区英文名'
)ENGINE = INNODB CHARACTER SET = utf8 COMMENT='东西部分区表';

TRUNCATE tbl_zone;
INSERT INTO tbl_zone VALUES
(1,'西部','WEST'),
(2,'东部','EAST');

DROP TABLE IF EXISTS tbl_team;
CREATE TABLE tbl_team(
	`TEAM_ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	`TEAM_NAME_CN` VARCHAR(32) NOT NULL COMMENT '球队中文名',
	`TEAM_NAME_EN` VARCHAR(32) NOT NULL COMMENT '球队英文名',
	`LOCATION` VARCHAR(256) NOT NULL COMMENT '球队所在地',
	`TEAM_BOSS` VARCHAR(64) NOT NULL COMMENT '球队老板',
	`ZONE_ID` INT NOT NULL,
	FOREIGN KEY(ZONE_ID) REFERENCES tbl_zone(ZONE_ID)
)ENGINE = INNODB CHARACTER SET = utf8 COMMENT='球队表';

TRUNCATE tbl_team;
INSERT INTO tbl_team VALUES
(1,'湖人','Laker','洛杉矶','珍妮巴斯',1),
(2,'火箭','Rocket','休斯顿','亚历山大',1),
(3,'骑士','Cavaliers','克利夫兰','吉尔伯特',2);

DROP TABLE IF EXISTS tbl_player;
CREATE TABLE tbl_player(
	`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	`P_NAME_CN` VARCHAR(32) NOT NULL COMMENT '球员中文名',
	`P_NAME_EN` VARCHAR(32) NOT NULL COMMENT '球员英文名',
	`P_NO` TINYINT NOT NULL COMMENT '球员号码',
	`TEAM_ID` INT NOT NULL ,
	`BIRTH_DAY` DATE NOT NULL CHECK(BOTH_DAY > '1920-01-01'),
	`SEX` CHAR(1) NOT NULL CHECK (SEX IN ('F','M')),
	FOREIGN KEY (TEAM_ID) REFERENCES tbl_team(TEAM_ID)
)ENGINE = INNODB CHARACTER SET = utf8 COMMENT='球员表';

TRUNCATE tbl_player;
INSERT INTO tbl_player VALUES
(1,'科比','Kobe',24,1,'1978-08-24','M'),
(2,'库兹马','Kuzma',0,1,'1995-07-24','M'),
(3,'哈登','HaDen',13,2,'1995-07-24','M'),
(4,'保罗','Pual',3,2,'1995-07-24','M'),
(5,'周琦','Zhouqi',9,2,'1995-07-24','M'),
(6,'詹姆斯','James',23,3,'1995-07-24','M'),
(7,'勒夫','Love',0,3,'1995-07-24','M');

DROP VIEW IF EXISTS view_all_player;
CREATE VIEW view_all_player AS
SELECT 
	p.ID,
	p.P_NAME_CN,
	p.P_NAME_EN,
	p.P_NO,
	t.TEAM_NAME_CN,
	t.LOCATION,
	t.TEAM_BOSS,
	z.ZONE_NAME_CN
FROM
	tbl_player p
INNER JOIN tbl_team t ON p.TEAM_ID = t.TEAM_ID
INNER JOIN tbl_zone z ON t.ZONE_ID = z.ZONE_ID;


6. 创建实体类

/**
 * 
 */
package com.jnk.mybatis.practise.service.entity;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author NonkeyJiang
 *
 */
public class PlayerEntity
{
	private Integer id;
	private String pNameCn;
	private String pNameEn;
	private Integer pNo;
	private Date birthDay;
	private Integer age;
	private Integer teamId;

	public Integer getId()
	{
		return id;
	}

	public void setId(Integer id)
	{
		this.id = id;
	}

	public String getpNameCn()
	{
		return pNameCn;
	}

	public void setpNameCn(String pNameCn)
	{
		this.pNameCn = pNameCn;
	}

	public String getpNameEn()
	{
		return pNameEn;
	}

	public void setpNameEn(String pNameEn)
	{
		this.pNameEn = pNameEn;
	}

	public Integer getpNo()
	{
		return pNo;
	}

	public void setpNo(Integer pNo)
	{
		this.pNo = pNo;
	}

	public Date getBirthDay()
	{
		return birthDay;
	}

	public void setBirthDay(Date birthDay)
	{
		this.birthDay = birthDay;
	}

	public Integer getAge()
	{
		return age;
	}

	public void setAge(Integer age)
	{
		this.age = age;
	}

	public Integer getTeamId()
	{
		return teamId;
	}

	public void setTeamId(Integer teamId)
	{
		this.teamId = teamId;
	}

	@Override
	public String toString()
	{
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		return "PlayerEntity [id=" + id + ", pNameCn=" + pNameCn + ", pNameEn=" + pNameEn + ", birthDay="
				+ dateFormat.format(birthDay) + ", age=" + age + ", teamId=" + teamId + "]";
	}

}

7. 进行测试

public class AppTest
{

	/**
	 * 测试方法
	 * 
	 * @param args
	 */
	public static void main(String[] args)
	{
		// 获取一个球员信息
		IPlayerMapper playerMapper = MySessionFactory.getSqlSession(IPlayerMapper.class);
		PlayerEntity player = playerMapper.queryPlayerInfo(1);
		System.out.println(player);
        }
}



问题:

使用mybatis提供的资源加载器加载配置文件,同时加载Mapper文件 如果报错 Resource not found  说明配置文件没有放到source 下
参考:http://blog.csdn.net/JJ_nan/article/details/63685929 解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值