关于mybatis的搭建及CRUD

使用mybatis自然也是需要一套流程,比如使用spring的话你会考虑用xml配置还是注解什么的,mybatis也是如此,我们暂且是先用xml。
这个过程也是比较简单的,先导入mybatis和mysql的依赖,随后编写mybatis-config.xml(说好了先试试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/mybatis?serverTimezone=UTC&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/li/dao/UserMapper.xml"/>
    </mappers>
</configuration>

这个标签基本是固定的没啥解释的,唯一需要注意的,一开头就提醒(虽然纠结是应该先不写后面加上还是什么的,但懒得我还是先写出来提醒),需要注意的就是那个mappers标签,我们一般开发时都是dao,写的接口都是userDao之类的,这里我们换成了Mapper,就换了名字而已,你想写dao也无所谓,但感觉跟着建议走比较好。不知道大家记不记得在Javaweb中有一个servlet,就是专门负责接受前台信息调用service的方法再将结果返回前台的那个层(不要拿ajax来吐槽!),大家每写一个servlet基本都要在web.xml中注册一下吧,这个mappers标签也是一样,在这个标签中注册我们的各个mapper.xml,你问我这个xml是啥?刚刚不是说了我们用xml来进行mybatis的开发嘛,这就是那个xml,每个接口对应一个xml,上代码。

例行pojo

public class User {
    private int id;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }

    public User() {
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}


public interface UserMapper {
    List<User> getAllUser();
    User getUserById(int id);
    int addUser(User user);
    int updateUser(User user);
    int deleteUser(int id);
}

<?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就是dao的意思,我们需要的是再这个dao中建立接口,这个namespace就是用来和接口连接的东西-->
<mapper namespace="com.li.dao.UserMapper">
    <!--这个id就是你接口中的方法名-->
    <!--这个resulttype就是说返回的类型-->
<select id="getAllUser" resultType="com.li.pojo.User">
    select * from  USER ;
</select>
    <!--parameterType指的是方法中参数的类型-->
    <select id="getUserById" resultType="com.li.pojo.User" parameterType="int">
        select * from USER  where id=#{id};
    </select>
    <insert id="addUser" parameterType="com.li.pojo.User">
        insert into user(id,name, pwd) VALUES(#{id},#{name},#{pwd});
    </insert>
    <update id="updateUser" parameterType="com.li.pojo.User">
        update user set name=#{name},pwd=#{pwd} where id=#{id};
    </update>
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id};
    </delete>
</mapper>

这个xml就没啥解释的了,大家作为老程序员都懂,这都是最基本的。
随后查考mybatis的文档发现,我们在jdbc中运行sql时都是用preparestatement,这里用的是sqlSession,你可以理解为这个sqlSession就是那个预编译的替代品,那也就是说我们必须要获得sqlSession这个东西,我们可以编写一个获取sqlSession的工具类(记得导入我们那个配置的mybatis-config.xml文件,这是核心文件)。

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        String resource= "mybatis-config.xml";
        try {
            InputStream stream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

其实写到这就可以运行了,但还有一个要点,就是事务!!!
写查询方法还无所谓,当进行增删改的时候一定要记得提交事务,不然数据库中啥都没变,但也不报错。

   @Test
    public void t1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.addUser(new User(4, "地方撒", "1235"));
        if (i>0){
            System.out.println("999");
        }
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void t2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(4,"哈哈","001"));

        //再次提醒增删改要提交
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void t3(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(4);
        sqlSession.commit();
        sqlSession.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值