mybatis入门-实现基本CRUD操作

来源:互联网 发布:阿里云域名续费优惠 编辑:程序博客网 时间:2024/05/17 06:06

mybatis入门-实现基本CRUD操作

    闲着没事,整理整理初学mybatis时候的笔记。另外上传了mybatis的jar包(包括开发jar包以及源代码jar),首先,建立一个java project,创建一个lib文件夹,放入mybatis的jar包跟mysql驱动的jar包,add to build path...。整体效果截图如下:



    然后,建立包目录结构和mybatis的配置文件,如上图所示。下面是User实体类:

package com.steadyjack.model;public class User {private Integer id;private String userName;private int age;private String address;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 int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", userName=" + userName + ", age=" + age+ ", address=" + address + "]";}}

    建立数据库表:

CREATE Database mybatisuse mybatisCREATE TABLE `tb_user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `userName` varchar(255) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `address` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;INSERT INTO `tb_user` VALUES ('1', 'jack', '12', 'foshan');INSERT INTO `tb_user` VALUES ('2', 'sam', '21', 'guagnzhou');INSERT INTO `tb_user` VALUES ('3', 'jerry', '22', 'sichuang');INSERT INTO `tb_user` VALUES ('4', 'silly', '23', 'chengdu');INSERT INTO `tb_user` VALUES ('8', 'july', '24', 'beijing');

    mybatis-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><!-- 别名 --><typeAliases><package name="com.steadyjack.model"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><!-- url中还配置了字符编码,防止插入中文到数据库时候出现乱码,注意用&代替&; --><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments> <mappers><mapper resource="com/steadyjack/mappers/userMapper.xml" /></mappers></configuration>

    建立UserDao:

package com.steadyjack.mappers;import java.util.List;import com.steadyjack.model.User;/** * 面向接口编程 * @author android * */public interface UserDao {public User getUserById(Integer id);public List<User> getUserList(User user);public void addUser(User user);public int updateUser(User user);public int deleteUser(Integer id);}

    建立UserMapper,其实就是UserDao的实现(从namespace就可以看出来了)

<?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="com.steadyjack.mappers.UserDao">          <resultMap type="User" id="resultListUser">    <id column="id" property="id" />    <result column="userName" property="userName" />          <result column="age" property="age" />          <result column="address" property="address" />    </resultMap>        <select id="getUserById" parameterType="Integer" resultMap="resultListUser">          select * from tb_user where id = #{id}      </select>          <select id="getUserList" parameterType="User" resultMap="resultListUser">    <!-- select * from tb_user where userName like "%"#{userName}"%" -->    select * from tb_user        <where>    <if test="userName!=null">    <!-- and userName like "%"#{userName}"%"  and mybatis会自动去掉的 -->    userName like "%"#{userName}"%"    </if>    <if test="address!=null">    or address like "%"#{address}"%"    </if>    </where>    </select>        <insert id="addUser" parameterType="User">    insert into tb_user(userName,age,address) values(#{userName},#{age},#{address})    </insert>        <update id="updateUser" parameterType="User">    <!-- update tb_user set userName=#{userName},age=#{age},address=#{address} where id=#{id} -->    update tb_user set    <set>    <if test="userName!=null">    userName=#{userName},    </if>    <if test="address!=null">    address=#{address}    </if>    </set>where id=#{id}        </update>        <delete id="deleteUser" parameterType="Integer">    delete from tb_user where id=#{id}    </delete>    </mapper>  

    最后是UserTest,测试接口中的各个方法:

package com.steadyjack.test;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import java.util.List;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;import com.steadyjack.mappers.UserDao;import com.steadyjack.model.User;public class UserTest {private static SqlSessionFactory sessionFactory;//private static Reader reader;private static final String loaction="mybatis-config.xml";static{try {//getResourceAsReader 发现底层实现的原理还是InputSteamReader(inputstream来实现的)//reader=Resources.getResourceAsReader("mybatis-config.xml");//sessionFactory = new SqlSessionFactoryBuilder().build(reader);InputStream stream=UserTest.class.getClassLoader().getResourceAsStream(loaction);sessionFactory=new SqlSessionFactoryBuilder().build(stream);} catch (Exception e) {System.out.println(e.getMessage());}}public static SqlSessionFactory getSession(){return sessionFactory;}@Testpublic void testGet(){SqlSession session=sessionFactory.openSession();UserDao userDao=session.getMapper(UserDao.class);User user=userDao.getUserById(4);System.out.println(user);}@Testpublic void testQueryList(){SqlSession session=sessionFactory.openSession();UserDao userDao=session.getMapper(UserDao.class);User user=new User();user.setAddress("州");List<User> userList=userDao.getUserList(user);for (User u : userList) {System.out.println(u);}}@Testpublic void testAdd(){SqlSession session=sessionFactory.openSession();UserDao userDao=session.getMapper(UserDao.class);User user=new User();user.setUserName("j");user.setAge(12);user.setAddress("f");try {userDao.addUser(user);session.commit();System.out.println("id: "+user.getId());} catch (Exception e) {System.out.println("提交事务发生异常: "+e.getMessage());} finally{session.close();}}@Testpublic void testUpdate(){SqlSession session=sessionFactory.openSession();UserDao userDao=session.getMapper(UserDao.class);User user=userDao.getUserById(12);System.out.println("原先的User: "+user);if (user!=null) {user.setUserName("steayjack");user.setAge(25);user.setAddress("上海");int res=0;try {res=userDao.updateUser(user);session.commit();System.out.println("提交成功: "+user.getId()+" -- 操作返回结果: "+res);} catch (Exception e) {System.out.println("提交事务发生异常:"+e.getMessage());} finally{session.close();}}else{throw new RuntimeException("没有该用户!");}}@Testpublic void testDelete(){SqlSession session=sessionFactory.openSession();UserDao userDao=session.getMapper(UserDao.class);try {int res=userDao.deleteUser(5);System.out.println("执行结果:"+res);session.commit();} catch (Exception e) {System.out.println("提交事务发生异常: "+e.getMessage());} finally{session.close();}}}


    没有涉及到什么关联映射之类的(其实,我在公司中实际的项目是不做实际的数据库关联的!)

    好了,就介绍到这里吧!我觉得这样入门的话,贼简单的!!!!后期会来一个spring springmvc mybatis的整合案例!!!

0 0
原创粉丝点击