首先运用mybatis需要先导入jar包
1.mybatis的jar包mybatis-3.4.1.jar
2.数据库的jar包mysql-connector-java-5.1.26-bin.jar
在连接数据库时需要先建立连接,mybatis采用配置文件进行设置。先书写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>
<!-- 导入外部配置文件 -->
<properties resource="com/my/config/MyBatis.properties"/>
<!-- 运行环境,default是默认使用的运行环境,可以书写多个environment -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务,这里由mybatis控制 -->
<transactionManager type="JDBC"/>
<!-- 这里创建了一个数据库连接池,由mybatis管理 -->
<dataSource type="POOLED">
<!-- ${driver}是MyBatis.properties文件里面配置的 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="com/my/config/UserMapper.xml"/>
</mappers>
</configuration>
下面是properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/XXX?userecode=true&character=utf8
username=root
password=1234
下面来分析下连接的配置文件:
1.environments
MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。但是要记得一个很重要的问题:你可以配置多种环境,但每个数据库对应一个 SqlSessionFactory。
所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。
在创建SqlSessionFactory的时候,如果是调用默认环境,直接通过SqlSessionFactoryBuilder对象构建出来,如果需要调用新的环境, 可以在Build方法加入一个参数,如:
//调用默认环境
SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream);
//根据参数调用环境
SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream,"development");
2.在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):
一种是调用JDBC的事务;
JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。 它依赖于从数据源得 到的连接来管理事务范围。
一种是 web容器的事务
这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让 容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认 情况下它会关闭连接。 然而一些容器并不希望这样, 因此如果你需要从连接中停止 它,将 closeConnection 属性设置为 false。例如:
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
3.dataSource
详细可以参见:https://blog.csdn.net/reliveit/article/details/47325189
4.Mapper配置的几种方法:
第一种(常用)
<mapper resource=" " />
resource指向的是相对于类路径下的目录
如:<mapper resource="sqlmap/User.xml" />
第二种
<mapper url=" " />
使用完全限定路径
如:<mapper url="file:///D:\workspace\mybatis1\config\sqlmap\User.xml" />
第三种
<mapper class=" " />
使用mapper接口类路径
如:<mapper class="cn.kang.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
第四种(推荐)
<package name=""/>
注册指定包下的所有mapper接口
如:<package name="cn.kang.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
<mappers>
<mapper resource="com/my/dao/stuDao/StuMapper.xml"/>
<package name="com.my.dao.stuDao"/>
</mappers>
实现简单的单表的增删改查
<?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.my.dao.IUserDao">
<select id="getAllUser" resultType="com.my.bean.UserBean">
select
pk_id as id,
f_username as username,
f_phone as phone
from
t_user
</select>
<select id="getUserById" resultType="com.my.bean.UserBean" parameterType="int">
select
pk_id as id,
f_username as username,
f_phone as phone
from
t_user
where
pk_id = #{id}
</select>
<update id="updateUserById" parameterType="int">
update
t_user
set
f_name = #{userName},
f_phone = #{phone}
where
pk_id = #{id}
</update>
<insert id="addUser" parameterType="com.my.bean.UserBean">
insert into
t_user
values
(null,#{userName},#{phone})
</insert>
<delete id="delUserById" parameterType="int">
delete from
t_user
where
pk_id = #{id}
</delete>
</mapper>
其中id是接口中的方法名,parameterType为方法的参数,resultType为方法返回值
下面是java代码
package com.my.dao;
import java.util.List;
import com.my.bean.UserBean;
public interface IUserDao {
List<UserBean> getAllUser();
UserBean getUserById(int id);
int updateUserById(int id);
int addUser(UserBean user);
int delUserById(int id);
}
最后是测试代码
package com.my.test;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import com.my.dao.IUserDao;
public class Test {
private SqlSession session1;
@Before
public void init() {
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("com/my/config/MyBatisConfig.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream);
session1 = sqlSession.openSession();
}
@org.junit.Test
public void test() {
IUserDao user = session1.getMapper(IUserDao.class);
System.out.println(user.getAllUser().size());
session1.close();
}
}