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 mybatismybatis 的核心包: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.javapackage 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.javapackage 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 代理的开发方法。期待…..
相关文章推荐
- 【MyBatis学习01】一个简单入门实例
- [知了堂学习笔记]_myBatis_01入门介绍
- MyBatis学习总结_01_MyBatis快速入门
- MyBatis 学习总结 01 快速入门
- 寄存器(CPU工作原理)01 - 零基础入门学习汇编语言06
- 寄存器(内存访问)01 - 零基础入门学习汇编语言13
- 分支程序设计01 - 零基础入门学习C语言10
- 分支程序设计01 - 零基础入门学习C语言10
- 数据类型,运算符和表达式01 - 零基础入门学习C语言02
- 包含多个段的程序01 - 零基础入门学习汇编语言29
- 寄存器(CPU工作原理)01 - 零基础入门学习汇编语言06
- C语言概述01 - 零基础入门学习C语言01(新版)
- 更灵活的定位内存地址的方法01 - 零基础入门学习汇编语言32
- 第一个程序01 - 零基础入门学习汇编语言20
- [BX]和loop指令01 - 零基础入门学习汇编语言23
- 寄存器(内存访问)01 - 零基础入门学习汇编语言13
- 顺序程序设计01 - 零基础入门学习C语言07
- C语言概述01 - 零基础入门学习C语言01(新版)
- 循环控制结构程序01 - 零基础入门学习C语言16
- 函数01 - 零基础入门学习C语言32