Mybatis入门程序
1、创建数据库
创建如下的的一个数据库表
2、需求
实现以下功能:
- 根据用户id查询一个用户信息
- 根据用户名称模糊查询用户信息列表
- 添加用户
- 更新用户
- 删除用户
3、创建java工程
4、 导入需要的jar包
5、在classpath下面创建log4j.properties文件
Mybatis使用log4j作为日志输出,因此要创建log4j.properties配置文件。
文件内容如下:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
6、在classpath下创建SqlMapConfig.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>
<!--
环境配置
在和Spring整合后改配置将废除
-->
<environments default="development">
<environment id="development">
<!--使用JDBC的事务管理,事务管理交给Mybatis-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池,有Mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
7、创建PO类
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String 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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
8、创建映射文件,user.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:命名空间,对SQL进行分类化的管理,进行sql隔离
-->
<mapper namespace="test">
<!--
查询sql语句配置使用select标签
id:该语句的唯一标识,通常称为statement的id
parameterType:输入参数的类型
resultType:返回数据的类型,指定为Java的po类型,则将查询出来的单条记录映射为po对象。
-->
<select id="findUserById" parameterType="int" resultType="com.jack.po.User" >
<!--
要执行的sql语句
#{} :表示一个占位符
#{value} :value表示接受的参数,名称为value,如果参数是简单类型,则名称可以随意起。
-->
SELECT * FROM user WHERE id=#{value}
</select>
<select id="findUserByName" parameterType="String" resultType="com.jack.po.User">
SELECT * FROM user WHERE username LIKE '%${value}%'
</select>
<insert id="insertUserInfo" parameterType="com.jack.po.User">
<!--
获取插入记录的id,只适用于mysql数据库的自增主键
keyProperty:主键名称
order:获取主键的时间。在insert语句执行之前还是之后
resultType:返回的数据类型
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
<!--输入参数为一个po时,#{}中间要写该po类的属性名称-->
INSERT INTO user(username,birthday,sex,address) VALUE (#{username},#{birthday},#{sex},#{address})
</insert>
<update id="updateUserInfo" parameterType="com.jack.po.User" >
UPDATE user set birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
</update>
<update id="deleteUserInfo" parameterType="int" >
DELETE FROM user WHERE id=#{value}
</update>
</mapper>
9、在SqlMapConfig.xml中引入上面的配置文件
<!--引入mapper-->
<mappers>
<!--rerource:引入映射文件相对于classpath的地址-->
<mapper resource="config/sqlmap/user.xml" />
</mappers>
10、创建测试类
public class UserTest {
private SqlSessionFactory sessionFactory;
@Before
public void setUp() throws Exception{
//SqlMapConfig.xml相对于classpath的地址
String resource = "config/SqlMapConfig.xml";
//使用inputString读入该配置文件
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象
sessionFactory = new SqlSessionFactoryBuilder().build(in);
}
@Test
public void findUserById(){
//创建SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
try {
/**
* 执行SqlSession对象的方法
* 第一个参数为:映射文件中的namespace+.+statement id
* 第二个参数为:要传入的参数值
*/
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void findUserByName(){
SqlSession sqlSession = sessionFactory.openSession();
try {
List<User> list = sqlSession.selectList("test.findUserByName","小明");
for (User user:list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void insertUserInfo(){
SqlSession sqlSession = sessionFactory.openSession();
try {
User user = new User();
user.setId(26);
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("甘肃天水");
sqlSession.update("test.insertUserInfo",user);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
public void updateUserInfo(){
SqlSession sqlSession = sessionFactory.openSession();
try {
User user = new User();
user.setUsername("东方不败");
user.setBirthday(new Date());
user.setSex("0");
user.setAddress("黑木崖");
int id =sqlSession.insert("test.updateUserInfo",user);
System.out.println(id);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void deleteUserInfo(){
SqlSession sqlSession = sessionFactory.openSession();
try {
sqlSession.delete("test.deleteUserInfo",28);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
}