Mybatis基础使用步骤
1.创建数据库和表
2.创建web项目,在lib中加入需要使用的jar包。
3.创建日志文件log4j.properties,做基础日志配置。
4.创建配置文件SqlMapConfig.xml,做基础环境配置。
5.创建po类User.java
6.创建UserMapper.xml文件,编写sql语句
7.创建测试类UserTest.java
总体框架:
1.创建数据库和表
说明:先创建mybatis数据库
CREATE TABLE 'user' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'username' varchar(32) NOT NULL COMMENT '用户名称',
'birthday' date DEFALUT NULL COMMENT '生日',
'sex' char(1) DEFALUT NULL COMMENT '性别',
'address' varchar(256) DEFALUT NULL COMMENT '地址'
PRIMAPY KEY('id')
);
2.创建web项目,在lib中加入需要使用的jar包。
3.创建日志文件log4j.properties,做基础日志配置。
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
4.创建配置文件SqlMapConfig.xml,做基础环境配置。
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml" />
</mappers>
</configuration>
5.创建po类User.java
package com.mybatis.po;
import java.util.Date;
public class User {
private int id;
private String username;//用户姓名
private String sex;//性别
private Date birthday;//生日
private String address;//地址
public User() {
super();
}
public User(int id, String username, String sex, Date birthday, String address) {
super();
this.id = id;
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
+ address + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
6.创建UserMapper.xml文件,编写sql语句
<?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="test">
<select id="findUserById" parameterType="Integer" resultType="com.mybatis.po.User">
select * from user where id = #{id}
</select>
<!-- 根据名称查询用户(模糊查询) -->
<!-- String就是java.lang.String的别名 -->
<!-- ${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql -->
<select id="findUserByName" parameterType="string"
resultType="com.mybatis.po.User">
select * from user
where username like '%${value}%'
</select>
<!-- 得到插入记录的主键keyProperty -->
<insert id="addUser" parameterType="com.mybatis.po.User" keyProperty="id"
useGeneratedKeys="true">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 根据id删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 修改数据 -->
<update id="updateUser" parameterType="com.mybatis.po.User">
update user set
username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
</update>
</mapper>
7.创建测试类UserTest.java
测试类说明:在进行单元测试之前,提前做一步增强。利用InputStream读取配置文件SqlMapConfig.xml。再利用SqlSessionFactoryBuilder创建SqlSessionFactory对象,即会话工厂。在测试中直接利用SqlSessionFactory对象创建SqlSession对象,利用SqlSession对象调用UserMapper.xml中的方法。
package com.mybatis.mytest;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
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 org.junit.Test;
import com.mybatis.po.User;
public class UserTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void createSqlSessionFactory() throws Exception {
String resource = "SqlMapConfig.xml";
// 通过流的方式将核心配置SqlMapConfig.xml文件读取进来
InputStream inputStream = Resources.getResourceAsStream(resource);
// 通过核心配置文件输入流来创建会话工厂
// 1.创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception {
// 怎么执行sql?
// 通过工厂创建会话
// 2.创建SqlSession
SqlSession session = sqlSessionFactory.openSession();
// 3.使用SqlSession来执行sql语句
// selectOne:查询一条记录
// statement:指定statment的id-》哪条sql-》namespace.+id
User user = session.selectOne("test.findUserById", 2);
System.out.println(user);
// 4.释放资源
session.close();
}
}
总结:
Session是一个面向用户的接口,sqlSession中定义了数据库操作,如:查询、插入、更新、删除等。默认使用DefaultSqlSession实现类。
SqlSession对象有SqlSessionFactory类创建的,需要注意的是每个线程都有SqlSession实例。SqlSession的实例不能共享,它是线程不安全的。所以不能在Servlet中声明该对象的一个实例变量。因为Servlet是单例的,声明成实例会造成线程安全问题。也绝不将SqlSession实例对象放在一个类的静态字段或实例字段中。比如Servlet对象中的Httpsession会话。接收的对象HTTP请求时,可以打开一个SqlSession对象操作数据库,然后返回响应,就可以关闭它。