MyBatis框架的使用

来源:互联网 发布:阿里巴巴北京总部 知乎 编辑:程序博客网 时间:2024/06/05 02:41
1.导入Maven包
mybatis 3.2.8版
junit 4.12版
mysql 5.1.37版
dbcp 1.4版
springmvc数据库已创建里创建user表

2.resources下config.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>  <environments default="development">    <environment id="development">      <transactionManager type="JDBC"/>      <dataSource type="POOLED">        <property name="driver" value="com.mysql.jdbc.Driver"/>        <property name="url" value="jdbc:mysql://localhost:3306/springmvc"/>        <property name="username" value="root"/>        <property name="password" value=""/>      </dataSource>    </environment>  </environments>  <mappers>    <mapper resource="mapping/userMapper.xml"/>  </mappers></configuration>

3.resources下mapping文件下userMapper.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="cn.tedu.mybatis.dao.IUserDao">  <insert id="insertUser" parameterType="cn.tedu.mybatis.bean.User" useGeneratedKeys="true" keyProperty="id">    insert into user(id,username,password,salary) values(null,#{username},#{password},#{salary})  </insert>    <!-- Mybatis 会自动的将查询结果列名与User的Bean属性对应赋值,如果表的列名与User Bean属性 列名不一致,  则需要使用列的别名方式修改查询结果列名,使其与User Bean属性一致。 -->  <select id="findAllUsers" resultType="cn.tedu.mybatis.bean.User">  select id,username,password,salary from user  </select>    <update id="updateUser" parameterType="cn.tedu.mybatis.bean.User">  update user set username=#{username},password=#{password},salary=#{salary} where id=#{id}  </update>    <select id="findUserById" resultType="cn.tedu.mybatis.bean.User" parameterType="int">  select id,username,password,salary from user where id=#{id}  </select>    <delete id="deleteUserById" parameterType="int">  delete from user where id=#{id}  </delete>    <select id="findUsersByParam" resultType="cn.tedu.mybatis.bean.User">  select id,username,password,salary from user where username like #{name} and salary >= #{salary}  </select>    <select id="findUsersByMap" resultType="map">  select id,username as name from user  </select>    <select id="findUsers" resultType="cn.tedu.mybatis.bean.User">  select id,username,password,salary from user where ${where} #{param}  </select></mapper>

4.Java Bean类

package cn.tedu.mybatis.bean;public class User {private Integer id;private String username;private String password;private Integer salary;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getSalary() {return salary;}public void setSalary(Integer salary) {this.salary = salary;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", password=" + password + ", salary=" + salary + "]";}}

5.接口类

package cn.tedu.mybatis.dao;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Param;import cn.tedu.mybatis.bean.User;public interface IUserDao {/** * 将user数据保存到数据库中,返回更新的个数 * @param user 用户信息数据 * @return 数据库更新的行数 */public Integer insertUser(User user);/** * 查询全部的用户信息 */public List<User> findAllUsers();/** * IUserDao 中添加更新方法,将用户信息进行更新 * @param user 需要更新的用户信息 * @return 更新的行数 */public Integer updateUser(User user);public User findUserById(Integer id);public Integer deleteUserById(Integer id);/** * MyBatis中多参数查询 要使用注解 @Param 绑定参数名 * 在SQL中,要使用参数名来绑定参数 #{salary} * @param salary * @param name * @return */public List<User> findUsersByParam(@Param("salary") Integer salary,@Param("name") String name);/** * 用Map封装查询结果 * @return */public List<Map<String, Object>> findUsersByMap();/** * 动态拼接SQL */public List<User> findUsers(@Param("where") String where,@Param("param") Object param);}

6.测试类

package cn.tedu.test;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;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 cn.tedu.mybatis.bean.User;import cn.tedu.mybatis.dao.IUserDao;public class DaoTestCase {SqlSessionFactory factory;@Beforepublic void init() throws IOException {/** * 初始化 SqlSessionFactory */String config="config.xml";//从classpath中读取配置文件config.xml为输入流InputStream in = Resources.getResourceAsStream(config);factory = new SqlSessionFactoryBuilder().build(in);}@Testpublic void testInsertUser() {/** * 测试利用Mybatis向数据库中插入数据 *///打开SessionSqlSession session = factory.openSession();//利用 Session 自动创建 IUserDao的实例IUserDao dao=session.getMapper(IUserDao.class);System.out.println(dao.getClass());User user=new User();user.setUsername("Tom");user.setPassword("123");user.setSalary(500); Integer n = dao.insertUser(user);System.out.println(n); session.commit();//提交事务session.close();}@Testpublic void testInsert() {/** * 利用SqlSession直接执行SQL,不访问DAO接口 * 与访问dao接口的结果完全一样。 * SqlSession提供了两种执行SQL功能 */SqlSession session = factory.openSession();//session.insert("SQL ID",参数对象)User user = new User();user.setUsername("rose");user.setPassword("123");user.setSalary(200); Integer n = session.insert("insertUser",user);System.out.println(user);System.out.println(n); session.commit();//提交事务session.close();}@Testpublic void testFindAllUsers() {/** * 查询全部用户信息 */SqlSession session = factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<User> list = dao.findAllUsers();for (User user : list) {System.out.println(user);}session.close();}@Testpublic void testUpdateUser() {/** * 测试更新用户信息方法 * 1.查询出用户信息 * 2.更改用户信息 */SqlSession session = factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);User user = dao.findUserById(10);System.out.println(user);user.setUsername("范XX");int n = dao.updateUser(user);System.out.println(n);session.commit();//提交事务session.close();}@Testpublic void testDeleteUserById() {/** * 测试删除用户的方法 */SqlSession session = factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);int id = 2;int n = dao.deleteUserById(id);System.out.println(n); session.commit();//提交事务session.close();}@Testpublic void testFindUsersByParam() {/** * 测试多参数查询 */String name = "%a%";Integer salary = 200;SqlSession session = factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<User> list = dao.findUsersByParam(salary, name);for (User user : list) {System.out.println(user);}session.close();}@Testpublic void testFindUsersByParam2() {String name = "%a%";Integer salary = 200;SqlSession session = factory.openSession();//将多个参数打包到map中传递到selectList方法Map<String,Object> params = new HashMap<String,Object>();params.put("name",name);params.put("salary", salary);List<User> list = session.selectList("findUsersByParam",params);for (User user : list) {System.out.println(user);}session.close();}@Testpublic void testFindByMap() {/** * 测试: 利用map封装查询结果 */SqlSession session = factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<Map<String, Object>> list = dao.findUsersByMap();for(Map<String, Object> map : list) {System.out.println(map);}session.close();}@Testpublic void testFindUsers() {String where = "username like";Object param = "%a%";SqlSession session = factory.openSession();IUserDao dao = session.getMapper(IUserDao.class);List<User> list = dao.findUsers(where, param);for(User user : list) {System.out.println(user);}session.close();}}

原创粉丝点击