【知了堂学习笔记】mybatis通过代理实现增删改查

来源:互联网 发布:公务员网络课程有用吗 编辑:程序博客网 时间:2024/06/15 16:07

请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

在前面一种方法中,每次使用方法都需要编写statement语句对sql语句进行定位,还有许多重复的代码。我们希望有一种方法可以按照开发dao接口一样来通过对dao接口进行调用就能实现功能,既方便调用也实现了代码的解耦。因此mapper代理产生了,同时它也是官方推荐我们使用的方法。

1.代码

1.1 项目结构
项目结构

1.2 user表

DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `username` char(16) NOT NULL,  `password` varchar(16) NOT NULL,  `age` char(16) NOT NULL,  `gender` varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('ljx1', 'hgig', 'yx', 'xy');INSERT INTO `user` VALUES ('123', '456', '789', '789');INSERT INTO `user` VALUES ('xuna', '5', '45', '6');

1.3 User.java

package entity;public class User {    private String userName;    private String passWord;    private String age;    private String gender;    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 String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    @Override    public String toString() {        // TODO Auto-generated method stub        return "userName = "+userName+",passWord = " +passWord+ ",age = "+age+",gender = " +gender+ "";    }}

1.4 conf.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"></transactionManager>            <!-- 数据源 -->            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/student"/>                <property name="username" value="root"/>                <property name="password" value="123456"/>            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="mapping/UserMapper.xml"/>    </mappers></configuration>

1.5 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="dao.UserDao">    <!-- 根据ID查询 -->    <select id="findById" resultType="entity.User" parameterType="String">        select * from user where username = #{username}    </select>    <!-- 查询所有 -->    <select id="findAll" resultType="list">        select * from user    </select>    <!-- 根据Id删除记录 -->    <delete id="deleteById" parameterType="String">        delete from user where username = #{username}    </delete>    <!-- 新增一条记录 -->    <insert id="insert" parameterType="entity.User">        insert into user values(#{username},#{password},#{age},#{gneder})    </insert>    <!-- 修改一条记录 -->    <update id="updateById" parameterType="entity.User" >        update user set password = #{password} , age = #{age} , gender = #{gender} where username = #{username}    </update>

1.6 TestUserDao.java

package test;import java.io.InputStream;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import dao.UserDao;import entity.User;import junit.framework.Test;public class TestUserDao {    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        // 1.读取配置文件        InputStream in = Test.class.getClassLoader().getResourceAsStream("mapping/conf.xml");        // 2.开启sql工厂        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);        // 3.获取sqlsession        SqlSession session = ssf.openSession(true);        // 4.通过代理实现userdao        UserDao userdao = session.getMapper(UserDao.class);        User user = userdao.findById("123");        System.out.println(user);    }}

2.注意事项

2.1 开发规范
2.1.1 *Mapper.xml中的namespace填写dao的路径。
namespace

2.1.2 dao接口中的方法名必须和mapper中的sql语句中的Id一致;返回值类型和sql语句中的resultType一致;输入参数和sql语句中的parameterType 一致;
mapper.xml
userdao.java

阅读全文
0 0