下载
到github上下载MyBatis的jar包,点击这里,到github上查看各个版本,选择相应版本进行下载,由于网速过慢,多次下载失败,我选择了去 csdn上下载了个jar包,版本为3.2.3。除此之外还需要导入JDBC包,下载地址点击这里。导包的方式详见Eclipse引入jar包的三种方式,推荐使用user lib的方式添加。工程结构如下:
1.创建配置文件
1.1 创建mysql配置文件mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.44/test
jdbc.username=root
jdbc.password=rancho945
上面分别配置了数据库驱动,数据库连接和帐号密码。值得注意的是,在生产环境中,为了安全起见,不能直接用root用户,而是根据实际情况,分配相应的用户及其权限进行数据库的连接。这里是为了演示方便,直接用root。如果是用Linux,iptables有时候会拦截连接,如果iptables玩得不6的朋友,在测试环境中可以把iptables暂时关闭,并且在mysql中设置root用户开放给局域网访问。
1.2 创建MyBatis配置文件mybatis.cfg.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="mysql.properties"></properties>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件方式1,一个一个的配置
<mapper resource="com/rancho945/DB/mapper/UserMapper.xml"/>-->
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<package name="com/rancho945/DB/mapper"/>
</mappers>
</configuration>
在properties节点引入了上面的mysql.properties文件,这样就可以在该文件中,通过 来使用properties文件定义的属性值,比如dataSource节点中使用 {jdbc.username}为mysql.properties中的用户名配置。
为了引入的方便,这mysql.properties和mybatis.cfg.xml都要放在src目录下
2. 创建数据表
为了演示,创建一个非常简单的数据表t_user:
create table t_user(
id int not null primary key auto_increment,
username varchar(60) not null,
password varchar(40) not null
);
3. 创建实体类
实体类UserBean.java中的属性要和数据表t_user中的数据列一致(事实上是可以不一致的,可以通过mapper文件灵活配置)
package com.rancho945.DB.bean;
import java.io.Serializable;
public class UserBean implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String password;
public UserBean() {
}
public UserBean(String username, String password) {
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}
4. 创建映射接口
数据映射接口UserMapper.java定义了对数据表t_user的增删查改功能:
package com.rancho945.DB.mapper;
import java.util.List;
import com.rancho945.DB.bean.UserBean;
public interface UserMapper {
/**
* 新增用戶
* @param user
* @return
* @throws Exception
*/
public int insertUser(UserBean user) throws Exception;
/**
* 修改用戶
* @param user
* @param id
* @return
* @throws Exception
*/
public int updateUser (UserBean user,int id) throws Exception;
/**
* 刪除用戶
* @param id
* @return
* @throws Exception
*/
public int deleteUser(int id) throws Exception;
/**
* 根据id查询用户信息
* @param id
* @return
* @throws Exception
*/
public UserBean selectUserById(int id) throws Exception;
/**
* 查询所有的用户信息
* @return
* @throws Exception
*/
public List<UserBean> selectAllUser() throws Exception;
}
5. 创建接口映射文件
接口映射文件定义了数据映射接口的操作以及实体类的映射关系,下面为UserMapper的映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rancho945.DB.mapper.UserMapper">
<!-- 自定义返回结果集 -->
<resultMap id="userMap" type="com.rancho945.DB.bean.UserBean">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="username" column="username" javaType="java.lang.String"></result>
<result property="password" column="password" javaType="java.lang.String"></result>
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
<!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user (username,password) values (#{username},#{password})
</insert>
<update id="updateUser" >
update t_user set username=#{username},password=#{password} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#{id}
</delete>
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from t_user where id=#{id}
</select>
<select id="selectAllUser" resultMap="userMap">
select * from t_user
</select>
</mapper>
映射文件详细配置,可参考xml映射文件
6.工具类
用于创建SqlSession的工具类DBUTools
package com.rancho945.DB.tools;
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;
public class DBTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建能执行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
7.测试类
UserTest.java
package com.rancho945.DB.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.rancho945.DB.bean.UserBean;
import com.rancho945.DB.mapper.UserMapper;
import com.rancho945.DB.tools.DBTools;
public class UserTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
insertUser();
selectUserById();
selectAllUser();
deleteUser();
}
/**
* 新增用户
*/
private static void insertUser() {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
UserBean user = new UserBean("ffff", "1314520");
try {
mapper.insertUser(user);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 删除用户
*/
private static void deleteUser(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
mapper.deleteUser(1);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 根据id查询用户
*/
private static void selectUserById(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
UserBean user= mapper.selectUserById(2);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 查询所有的用户
*/
private static void selectAllUser(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
List<UserBean> user=mapper.selectAllUser();
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
参考资料:Mybatis参考文档