本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/63323701 (转载请注明出处)
mybatis框架是一个持久层框架,它提供一种“半自动化”的ORM实现。mybatis主要关注POJO(Plain Old Java Objects,普通的Java 对象)与SQL之间的映射关系,对于SQL语句,需要自己编写。 Mybatis的使用非常简单,下面通过一个小示例来入门mybatis 。
一、准备工作:
1、创建java项目
这里我们选择Dynamic Web Project(动态web项目),当然也可以选择普通的Java Project。
在创建的过程中,我们给source folder增加一个config目录用于放置配置文件。在开发中,要养成归类的习惯。
2、创建Mysql库、表
创建库
CREATE DATABASE `tangwenmingdb` /*!40100 DEFAULT CHARACTER SET utf8 */
在tangwenmingdb
中创建分类用户表user
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`salt` varchar(50) DEFAULT NULL,
`sex` smallint(1) DEFAULT NULL COMMENT '0-未知 1-男 2-女',
`address` varchar(50) DEFAULT NULL,
`cellphone` varchar(30) DEFAULT NULL,
`email` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、在Java项目中导入mybatis相关包以及mysql连接组件
mybatis需要jar包:mybatis-3.3.0.jar和几个依赖包,全部导入到工程中即可
mysql驱动jar包:mysql-connector-java-5.1.26-bin.jar
日志记录jar包:log4j-core-2.2.jar和依赖包
记得拷贝log4j的配置文件log4j.properties至config目录下
(相关包下载请点击)
三、创建mybatis配置文件sqlMapConfig.xml及数据库连接配置文件
db.properties内容:
url=jdbc:mysql://localhost:3306/tangwenmingdb
user=root
password=yjcsxdl
driverClass=com.mysql.jdbc.Driver
sqlMapConfig.xml内容由三部分组成:
1、typeAliases:设置pojo别名
2、配置mybatis运行环境
3、加载mapper映射
<?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>
<!-- 引入外部db连接配置文件 -->
<properties resource="db.properties"></properties>
<!-- 1、typeAliases:设置pojo别名 -->
<typeAliases>
<!-- 方式1:针对单个别名的定义。type:类型的路径; alias:别名 -->
<!-- <typeAlias type="twm.mybatisdemo.pojo.User" alias="User"/> -->
<!-- 方式2:自动扫描,将JAVA类的类名作为类的类别名 -->
<package name="twm.mybatisdemo.pojo" />
</typeAliases>
<!-- 2、配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 3、加载mapper映射 -->
<!-- 第一种方式: 一个个指定接口文件及配置文件位置
<mappers>
<mapper resource="twm/mybatisdemo/mapper/User.xml" />
<mapper class="twm.mybatisdemo.mapper.UserMapper"/>
</mappers> -->
<!-- 第二种方式: 指定目录加载,要求接口文件与xml配置在同一个目录下 -->
<mappers>
<package name="twm/mybatisdemo/mapper" />
</mappers>
</configuration>
四、创建POJO,即:数据实体对象
package twm.mybatisdemo.pojo;
public class User {
Integer id;
String username;
String password;
String salt;
Short sex;
String address;
String cellphone;
String email;
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;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Short getSex() {
return sex;
}
public void setSex(Short sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User() {
}
public User(String username, String password, String salt,
Short sex, String address, String cellphone, String email) {
super();
this.username = username;
this.password = password;
this.salt = salt;
this.sex = sex;
this.address = address;
this.cellphone = cellphone;
this.email = email;
}
@Override
public String toString() {
return "姓名:"+username+",性别:"+sex+",地址:"+address+",邮箱:"+email;
}
}
五、创建映射器接口UserMapper.java及映射器配置文件UserMapper.xml
映射器接口文件 UserMapper.java:
package twm.mybatisdemo.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import twm.mybatisdemo.pojo.User;
public interface UserMapper {
/**
* 新增用戶
*
* @param user
* @return
* @throws Exception
*/
public int insert(User user) throws Exception;
/**
* 修改用戶
*
* @param user
* @param id
* @return
* @throws Exception
*/
public int update(User user) throws Exception;
/**
* 刪除用戶
*
* @param id
* @return
* @throws Exception
*/
public int delete(int id) throws Exception;
/**
* 根据id查询用户信息
*
* @param id
* @return
* @throws Exception
*/
public User selectById(int id) throws Exception;
/**
* 查询所有的用户信息
*
* @return
* @throws Exception
*/
public List<User> selectAll() throws Exception;
/**
* 根据用户名模糊查询用户
* @param searchkey
* @return
* @throws Exception
*/
public List<User> findByName(@Param(value="searchkey") String searchkey) throws Exception;
}
映射配置文件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" >
<mapper namespace="twm.mybatisdemo.mapper.UserMapper">
<!-- 自定义返回结果集 -->
<resultMap id="userMap" type="twm.mybatisdemo.pojo.User">
<id column="id" property="id" jdbcType="INTEGER" />
<result property="username" column="username" javaType="String" jdbcType="VARCHAR"></result>
<result property="password" column="password" javaType="String" jdbcType="VARCHAR"></result>
<result property="salt" column="salt" javaType="String" jdbcType="VARCHAR"></result>
<result property="sex" column="sex" javaType="Short" jdbcType="INTEGER"></result>
<result property="address" column="address" javaType="String" jdbcType="VARCHAR"></result>
<result property="cellphone" column="cellphone" javaType="String" jdbcType="VARCHAR"></result>
<result property="email" column="email" javaType="String" jdbcType="VARCHAR"></result>
</resultMap>
<!-- useGeneratedKeys 取值范围true|false 默认值是:false。
含义:设置是否使用JDBC的getGenereatedKeys方法(如:Mysql自增)获取主键并赋值到keyProperty设置的模型属性中 -->
<!-- #{}:表示一个占位符,用来接收输入参数的。 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into user (username,password,salt,sex,address,cellphone,email) values
(#{username},#{password},#{salt},#{sex},#{address},#{cellphone},#{email})
</insert>
<update id="update">
update user set
username=#{username},password=#{password},salt=#{salt},sex=#{sex},address=#{address},
cellphone=#{cellphone},email=#{email}
where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete>
<select id="selectById" parameterType="int" resultMap="userMap">
select * from user where id=#{id}
</select>
<select id="selectAll" resultMap="userMap">
select * from user
</select>
</mapper>
六、创建生成Sqlsession的辅助类
package twm.mybatisdemo.Assist;
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 SqlSessionAssist {
public static SqlSessionFactory sessionFactory;
static {
try {
Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
// InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return sessionFactory.openSession();
}
}
七、调用 Run as Java Application
public class firstTest {
public static void main(String[] args) throws Exception {
SqlSession session = SqlSessionAssist.getSession();
//session.select("select", 38);
/*获取user O/R映射关系*/
UserMapper usermapper=session.getMapper(UserMapper.class);
User aPerson;
/*1、增加单条记录*/
aPerson=new User("郭灭","123456", "aX3Qcs", (short)1, "济南云龙客栈", "18911110000", "guom@gulong.com");
/*insert返回操作记录的数量,插入一条记录即为:1。*/
usermapper.insert(aPerson);//接口映射方式
//session.insert("insert",aPerson);//直接采用DAO方式
System.out.println("1、增加单条记录:插入用户["+aPerson+"]成功。");
/*2、增加单条记录,并返回插入ID*/
aPerson=new User("高天仪","123456", "aX3Qcs", (short)2, "北冥山庄", "18911110000", "gaotianyi@gulong.com");
/*xml配置了useGeneratedKeys="true" keyProperty="id",则会将插入后的主键填充到参数里的user对象的主键中。
*aPerson.getId()返回插入记录的主键*/
usermapper.insert(aPerson);
System.out.println("2、增加单条记录,并返回插入ID:插入用户["+aPerson+"]成功。ID:"+aPerson.getId());
session.commit();/*提交*/
/*3、读取单条记录*/
User tmpuser=usermapper.selectById(aPerson.getId());//接口映射方式
//User tmpuser=session.selectOne("selectById", aPerson.getId());//直接采用DAO方式
System.out.println("3、读取单条记录:"+tmpuser+"。ID:"+tmpuser.getId());
/*4、修改单条记录*/
tmpuser.setAddress("锦绣山庄");
tmpuser.setUsername("三笑将军");
usermapper.update(tmpuser);
session.commit();/*提交*/
System.out.println("4、修改单条记录:"+tmpuser+"。ID:"+tmpuser.getId());
/*5、删除单条记录*/
usermapper.delete(tmpuser.getId());
session.commit();/*提交*/
System.out.println("5、删除单条记录:"+tmpuser);
/*6、查询记录*/
List<User> userList=usermapper.findByName("灭");
System.out.println("6、查询记录:共找到"+userList.size()+"个用户");
/*End:关闭mybatis会话*/
session.close();
}
}
运行后输出:
1、增加单条记录:插入用户[姓名:郭灭,性别:1,地址:济南云龙客栈,邮箱:guom@gulong.com]成功。
2、增加单条记录,并返回插入ID:插入用户[姓名:高天仪,性别:2,地址:北冥山庄,邮箱:gaotianyi@gulong.com]成功。ID:52
3、读取单条记录:姓名:高天仪,性别:2,地址:北冥山庄,邮箱:gaotianyi@gulong.com。ID:52
4、修改单条记录:姓名:三笑将军,性别:2,地址:锦绣山庄,邮箱:gaotianyi@gulong.com。ID:52
5、删除单条记录:姓名:三笑将军,性别:2,地址:锦绣山庄,邮箱:gaotianyi@gulong.com 6、查询记录:共找到1个用户
至此我们用mybatis完成了基础的增删改查操作。
本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/63323701 (转载请注明出处)