mybatis如何增改删(以及mappers中的parameterType问题)

来源:互联网 发布:小学生大数据分析 编辑:程序博客网 时间:2024/05/17 03:19

首先看完我第一篇笔记http://blog.csdn.net/zyf2333/article/details/77528279,我是跟着这一篇来继续学习的。然后学习过程中发现parameterType的参数传入有点搞不懂,最后讲讲。

jikeUser.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><!--此处的parameterType中使用了别名机制,配置在MyBatis.xml中-->    <insert id="insertUser" parameterType="JikeUser" statementType="PREPARED"        keyProperty="id" useGeneratedKeys="true">        insert into        JikeUser(username,password) values        (#{userName},#{passWord})    </insert>    <update id="updateUser" parameterType="JikeUser">        UPDATE JikeUser SET        userName=#{userName},password=#{passWord} WHERE id=#{id}    </update>    <delete id="deleteUser" parameterType="int">        delete from JikeUser where id=#{id}    </delete></mapper> 

基础 配置文件如下(MyBatis.xml):

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//iBATIS.com//DTD SQL Map Config 3.0//EN" "mybatis-3-config.dtd" ><configuration>    <!-- 定义别名,这样在jikeUser.xml中的parameterType中不用写全类名了 -->    <typeAliases>        <typeAlias type="jike.book.pojo.JikeUser" alias="JikeUser" />    </typeAliases>    <!-- 定义数据库信息,默认使用development数据库构造环境 -->    <environments default="development">        <environment id="development">            <!-- 采用jdbc事物管理 -->            <transactionManager type="JDBC" />            <!-- 配置数据库链接信息 -->            <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="zyf1998don" />            </dataSource>        </environment>    </environments>    <!-- 定义映射器,即引用上面的那个SQL语句文件 -->    <mappers>        <mapper resource="jike/book/map/jikeUser.xml" />        <mapper class="jike.book.map.InterfaceJikeUserMap" />    </mappers></configuration>

然后是JikeUser.java

package jike.book.pojo;public class JikeUser {    private int id;    private String userName;    private String passWord;    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 getPassWord() {        return passWord;    }    public void setPassWord(String passWord) {        this.passWord = passWord;    }}

最后写个测试类

package jike.book.test;import java.io.Reader;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 jike.book.map.InterfaceJikeUserMap;import jike.book.pojo.JikeUser;public class TestUpdate {    public static void main(String[] args) {        // TODO Auto-generated method stub        String resource="jike/book/map/MybatisConfig.xml";        Reader reader=null;        SqlSession sqlSession;        try{            reader=Resources.getResourceAsReader(resource);        }catch(Exception e){            e.printStackTrace();        }        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);        sqlSession=sqlSessionFactory.openSession();        try{            JikeUser jk=new JikeUser();            jk.setUserName("jike002");            jk.setPassWord("1245464");            sqlSession.insert("insertUser", jk);            sqlSession.commit();            JikeUser jk2=new JikeUser();            jk2.setId(6);            jk2.setUserName("jk003");            jk2.setPassWord("666");            sqlSession.update("updateUser", jk2);            sqlSession.commit();            JikeUser jk3=new JikeUser();            jk3.deleteUser(1);            sqlSession.commit();        }catch(Exception e){            e.printStackTrace();        }    }}

最后说一下parameterType的参数传入问题:

parameterType可以传入很多类型,基础的如int varchar等等,这些很好理解,比如说在SQL语句的#{id}就代表着要传入一个int类型的数字。但是在学习过程中,发现居然还能传入Java类(即上面的 parameterType=”JikeUser”; 这里利用了别名机制,实际上应该是 parameterType=”jike.book.pojo.JikeUser”,即类的全名)?

于是最后我的领悟是:有多个参数时一般都会插入类用来使这个xml文件和Java文件相关联,并且可以令xml文件引用Java中的属性。在本例中,联系上了JikeUser.java,它有id,userName和passWord这三个属性。然后在JikeUser.xml中的插入语句中

<insert id="insertUser" parameterType="JikeUser" statementType="PREPARED"        keyProperty="id" useGeneratedKeys="true">        insert into        JikeUser(username,password) values        (#{userName},#{passWord})    </insert>

此处的#{userName}和#{passWord}就是传入的JikeUser.java这个类中的userName和passWord两个属性,且名字要对应相同(ps:此处不设置id是因为数据库开启了自增,所以id会自动增加,故没有管id)。而如果只有一个参数,则直接写”int” “String”之类的就好了