您的位置:首页 > 其它

MyBatis学习入门_01

2017-07-04 11:32 267 查看

1. 概述

关于 MyBatis 的第一篇文章,主要记录一下MyBatis 的整体执行过程以及写一个入门程序。

2. MyBatis 的整体执行过程

参考这篇文章:http://blog.csdn.net/eson_15/article/details/51582967

这里做个小结:配置mybatis的全局配置文件SqlMapConfig.xml(名称不固定的,里面配置数据源,事务,mapper.xml文件等),通过 SqlMapConfig.xml 配置文件创建SqlSessionFactory(会话工厂), 然后通过会话工厂创建 sqlSession,之后就可以对数据库进行增删改查。

3. MyBatis 的环境配置

3.1 jar 包

mybatis 的 jar 包可以在 github 上下载,地址:github mybatis

mybatis 的核心包:mybatis-3.3.0.jar

mybatis 的lib文件夹下的依赖包

数据库驱动包:mysql-connector-java-5.0.8-bin.jar

共 11 个 jar 包。

3.2 log4j.properties 日志配置文件

# Global logging configuration
# developer-->DEBUG  productor-->INFO or ERROR
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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. MyBatis 的 helloworld 程序

下载好相应 jar 包后,就可以写我们的 helloworld 程序了。

步骤:创建一个 java 工程MyBatis_first –> 导入相应 jar 包 –> 创建 config 源文件夹 在里面配置 log4j.properties 和 SqlMapConfig.xml

4.1 log4j.properties

如上

4.2 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整合后environment配置都会被干掉 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,目前由mybatis来管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,目前由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="1018" />
</dataSource>
</environment>
</environments>
<!-- <mapper>标签用来配置映射文件的,这些映射文件是针对不同的pojo的 -->
<mappers>
<mapper resource="sqlmap/User.xml" />
</mappers>
</configuration>


注意这里要改成自己的数据库账号密码。

4.3 写一个 pojo 类—User.java,映射数据库中的对应表—user 。其中表的字段和类的成员变量要一一对应。

User.java

package mybatis.po;

import java.util.Date;

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 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;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}

public User(int id,String userName,Date birthday,String sex, String address)
{
this.id = id;
this.username = userName;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}

public User(){}

}


4.4 之后配置 mapper.xml文件,在User.xml 中配置我们的 sql 语句,注意 mapper.xml 文件需要在 SqlMapConfig.xml 文件中配置。

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="test">
<!-- 需求:通过id查询用户 -->
<select id="findUserById" parameterType="int" resultType="mybatis.po.User">
select * from user where id = #{id}
</select>
</mapper>


详细介绍请参考:http://blog.csdn.net/eson_15/article/details/51592608

4.5 接下来写一个测试类测试一下能不能查询到数据库中的数据

MybatisTest.java

package mybatis.first;

import java.io.IOException;
import java.io.InputStream;

import mybatis.po.User;

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.Test;

public class MybatisTest {
//因为接下来的测试代码中,获取sqlSession这部分都相同,所以抽取成一个方法
public SqlSession getSession() throws IOException {

String resource = "SqlMapConfig.xml"; //mybatis配置文件

//得到配置文件的流
InputStream inputStream = Resources.getResourceAsStream(resource);

//创建会话工厂SqlSessionFactory,要传入mybaits的配置文件的流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

return sqlSession;
}

//根据id查询用户的信息,得到一条记录的结果
@Test
public void findUserById() throws IOException {

SqlSession sqlSession = getSession(); //调用上面的方法获取sqlSession

//通过SqlSession操作数据库
//第一个参数:映射文件中statement的id,= namespace + statement的id
//第二个参数:指定和映射文件中所匹配的parameterType类型的参数
//selectOne表示查询出一条记录进行映射
User user = sqlSession.selectOne("test.findUserById", 2);

System.out.println(user);

//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}

}


简单解释一下:getSession() 获取到 SqlSession 然后通过 sqlSession 来操作数据库,之后关闭sqlSession。这样就完成了查找一条记录的操作。增删改查的操作都很类似的。

4.6 根据用户名称模糊查询用户信息

我们只需要在User.xml 文件中配置相应的 sql 语句,然后在测试类中测试就可以了的。

User.xml

<mapper namespace="test">

<!-- 省略其他 -->

<!-- 根据用户名称模糊查询用户信息,可能返回多条 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="mybatis.po.User">
select * from user where username like '%${value}%'
</select>
</mapper>


MybatisTest.java

//根据用户名称模糊查询用户信息
@Test
public void findUserByName() throws IOException {
SqlSession sqlSession = getSession();
List<User> users = sqlSession.selectList("test.findUserByName", "小明");
System.out.println(users);
sqlSession.close();
}


4.7 添加用户

添加用户的操作也是在 User.xml文件中写添加的 sql 语句,之后我们在测试的类里面测试一下。

User.xml

<mapper namespace="test">

<!-- 省略不相关配置 -->

<!-- 添加用户 -->
<insert id="insertUser" parameterType="mybatis.po.User">
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})

<!-- 将插入数据的主键返回,返回到user对象中 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id()
</selectKey>

<!--
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>
-->
</insert>
</mapper>


测试的java类

//添加用户信息
@Test
public void insertUser() throws IOException {

SqlSession sqlSession = getSession();

User user = new User("倪升武", new Date(), "男", "同济大学");

sqlSession.insert("test.insertUser", user); //添加一项

//提交事务
sqlSession.commit();

System.out.println(user.getId()); //获取刚刚添加的id

//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}


4.8 更新用户和删除用户

比较简单,就直接写了

User.xml 配置文件

<mapper namespace="test">

<!-- 省略不相关配置 -->

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>

<!-- 更新用户 -->
<update id="updateUser" parameterType="mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
</mapper>


测试类代码

//删除用户信息
@Test
public void deleteUser() throws IOException {

SqlSession sqlSession = getSession();

//传入id,删除用户
sqlSession.delete("test.deleteUser", 16);

//提交事务
sqlSession.commit();

//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}

//更新用户信息
@Test
public void updateUser() throws IOException {

SqlSession sqlSession = getSession();

User user = new User("倪升武", new Date(), "男", "同济大学");
user.setId(9);

//更新用户
sqlSession.update("test.updateUser", user);

//提交事务
sqlSession.commit();

//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}


总结:这样我们就利用 MyBatis 实现了最基本的增删改查操作,这里重点是把握 MyBatis 的整体流程,后面一篇文章会总结一下 Mybatis 的 两种开发方法:原始 dao 开发方法和 mapper 代理的开发方法。期待…..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: