Mybatis笔记之二 -- 简单的增删改查

来源:互联网 发布:linux追加分区大小 编辑:程序博客网 时间:2024/05/23 20:57

如何实现数据的增删改查?

   User.xml     参数: #{parameterName} 
  参数类型:parameterType=“string | User | hashmap"
  结果类型:resultType=“User | hashmap"

  查询所有 <select>
  查询一条 <select>
  新增记录 <insert> string|map 所有实体类的地方都可以改成map。
  修改记录 <update>
  删除记录 <delete>

  SqlSession session = sqlSessionFactory.openSession();
  查询所有 session.selectList
  查询一条 session.selectOne
  新增记录 session.insert
  修改记录 session.update
  删除记录 session.delete

 

1、sqlMapConfigp配置文件

<?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><!-- 环境配置default="随便取名字"<environment id="可以与上面的同名或者随便取名">--><environments default="development"><environment id="development"><!-- 事务管理 事务:有JDBC/MANAGED--><transactionManager type="JDBC"/><!--数据源 :有UNPOOLED(不用连接池)/POOLED/JNDI(一般远程操作的时候用)--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 映射文件的位置 --><mappers><mapper resource="cn/mybatis/domain/User.xml"/></mappers></configuration>

2、实体类User.java

public class User {private String id;private String name;private String address;public String getId() {return id;}public void setId(String id) {System.out.println("利用set方法设置id");this.id = id;}public String getName() {System.out.println("调用get方法获取Name");return name;}public void setName(String name) {System.out.println("利用set方法设置name");this.name = name;}public String getAddress() {System.out.println("调用get方法获取Address");return address;}public void setAddress(String address) {System.out.println("利用set方法设置ddres");this.address = address;}@Overridepublic String toString() {return "id = "+id+"name = "+ name +" address" + address;}}


3、映射文件 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="cn.mybatis.domain.User"><!--描述数据库与实体类的对应关系--><resultMap type="cn.mybatis.domain.User" id="userMap"><id column="id" property="id"/><result column="name" property="userName"/><result column="address" property="address"/></resultMap><sql id="mysql">id,name,address</sql><!-- 根据id查询 user--><select id="selectUserById" parameterType="string" resultType="cn.mybatis.domain.User">select * from user where id = #{id}<!--  #{id} 中的参数可以随便写,因为是传进来的,在这里起到的是占位的作用--></select><!-- 根据id查询 user  利用包含的语句进行--><select id="selectUserById" parameterType="string" resultMap="userMap">select <include refid="mysql"/> from user where id = #{userid}</select><!-- 查询所有的user --><select id="selectAllUser" resultType="cn.mybatis.domain.User">select id,name,address from user</select><!-- 根据id查询 user--><select id="serlectUserByIdForMap" parameterType="string" resultType="hashmap">select id,name,address from user where id = #{id}</select><!-- 插入User 参数为hashmap--><insert id="inserUserForMap" parameterType="hashmap">insert into user(id,name,address) values(#{id},#{name},#{address})</insert><!-- 插入user --><insert id="insertUser" parameterType="cn.mybatis.domain.User">insert into user(id,name,address) values(#{id},#{name},#{address})<!-- 其中vlaues(#{id},#{name},#{address}中的参数不可以随便写,必须有对应的get方法,因为是通过反射注入进来的 --></insert><!-- 根据id删除user --><delete id="deleteUserById" parameterType="string">delete from user where id = #{id}</delete><!-- 根据id更新user --><update id="updateUserById" parameterType="cn.mybatis.domain.User">update user set name = #{name}, address = #{address} where id =  #{id}</update><!-- 根据id更新user 更新参数为Map--><update id="updateUserByIdForMap" parameterType="hashmap">update user set name = #{name}, address = #{address} where id =  #{id}</update><!-- 动态sql --><select id="selectUserByCondition" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">select id,name,address from user where 1=1<if test="id != null">and id = #{id}</if><!-- userName指的是实体的属性 --><if test="name != null">and name = #{name}</if><if test="address != null">and address = #{address}</if></select><!-- 动态sql --><select id="selectUserByCondition2" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">select id,name,address from user<where><if test="id != null">   id = #{id}</if><!-- userName指的是实体的属性 --><if test="name != null">and name = #{name}</if><if test="address != null">and address = #{address}</if></where></select></mapper>



4、测试用例MyBatis.java

package cn.mybatis.test;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.mybatis.domain.User;public class MuBatis {SqlSessionFactory sf;//初始化,读取配置文件@Beforepublic void init()throws Exception{String resource = "sqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);sf = new SqlSessionFactoryBuilder().build(input);}@Testpublic void test()throws Exception{String resource = "sqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(input);/* * 创建SqlSessionFactory实例。没有指定要用到的 //environment,则使用默认的environment SqlSession session  = sf.openSession();User user = session.selectOne("cn.mybatis.domain.User.selectUserById", "01");System.out.println(user);*/SqlSession session  = sf.openSession();List<User> users = session.selectList("cn.mybatis.domain.User.selectAllUser");for(User u : users){System.out.println(u);}}//根据id查询user,返回值得类型为Map@Testpublic void serlectUserByIdForMapTest()throws Exception{SqlSession session = sf.openSession();Map map = session.selectOne("cn.mybatis.domain.User.serlectUserByIdForMap", "002");System.out.println(map);}//添加user@Testpublic void insertUserTest()throws Exception{//打开一个数据库的连接SqlSession session = sf.openSession();User user = new User();user.setId("002");user.setName("测试002");user.setAddress("测试地址002");//返回影响记录(行数)的条数int i = session.insert("cn.mybatis.domain.User.insertUser", user);//对数据库的增删改时候不要忘记提交事务session.commit();System.out.println(i);}//添加user,添加的参数类型为map@Testpublic void inserUserForMapTest()throws Exception{SqlSession session = sf.openSession();Map user = new HashMap();user.put("id", "001");user.put("name", "测试001");user.put("address", "测试地址001");//调用的方法中的参数  1、调用数据库的语句    命名空间 + sql的id  2、需要插入的参数int i = session.insert("cn.mybatis.domain.User.inserUserForMap", user);session.commit();System.out.println(i);}//根据id删除user@Testpublic void deleteUserByIdTest()throws Exception{SqlSession session = sf.openSession();//返回值为删除影响的条数int i = session.delete("cn.mybatis.domain.User.deleteUserById", "02");session.commit();System.out.println(i);}//根据id更新user@Testpublic void updateUserByIdTest()throws Exception{SqlSession session = sf.openSession();User user = new User();user.setId("011");user.setName("更新001");user.setAddress("更新001地址");int i = session.update("cn.mybatis.domain.User.updateUserById", user);session.commit();System.out.println(i);}//根据id更新user  参数为map@Testpublic void updateUserByIdForMapTest()throws Exception{SqlSession session = sf.openSession();Map user = new HashMap();user.put("id", "03");user.put("name", "更新003");user.put("address", "更新003地址");int i = session.update("cn.mybatis.domain.User.updateUserByIdForMap", user);session.commit();System.out.println(i);}//动态sql@Testpublic void selectUserByConditionTest()throws Exception{SqlSession session = sf.openSession();User u = new User();u.setId("001");//u.setName("aaa");//u.setAddress("dd");List<User> users = session.selectList("cn.mybatis.domain.User.selectUserByCondition", u);for(User us : users){System.out.println(us);}}}

5、Mybatis与hibernate比较

 

Hibernatehibernate.cfg.xml            Hibernate配置文件User.hbm.xml                 对应数据库一张真实表,配置表之间的关系User.java                    对应映射的字段SessionFactory              localSessionFactoryBeanMybatissqlMapConfig.xml            Mybatis配置文件User.xml                    对应sql构造出的虚拟表,resultMap配置多表之间的关系User.java                   对应映射的字段SessionFactory              sqlSessionFactoryBean


0 0
原创粉丝点击