MyBatis学习入门_01

来源:互联网 发布:mac最近删除的照片 编辑:程序博客网 时间:2024/05/18 01:19

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

  1. mybatis 的核心包:mybatis-3.3.0.jar
  2. mybatis 的lib文件夹下的依赖包
  3. 数据库驱动包:mysql-connector-java-5.0.8-bin.jar
    共 11 个 jar 包。

3.2 log4j.properties 日志配置文件

# Global logging configuration# developer-->DEBUG  productor-->INFO or ERRORlog4j.rootLogger=DEBUG, stdout# MyBatis logging configuration...log4j.logger.org.mybatis.example.BlogMapper=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.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 configurationPUBLIC "-//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 mapperPUBLIC "-//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 代理的开发方法。期待…..