首先看完我第一篇笔记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”之类的就好了