MyBatis学习笔记(1)

MyBatis学习笔记

1.学习前的准备工作

添加相关的依赖:可以通过下面这个网站搜索自己需要的依赖自行添加,这里用的是3.5.2版本

maven仓库链接

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>

官方文档:可以选择语言

MyBatis中文文档

源码:

github地址

2.第一个Mybatis程序

思路:环境搭建–>导入Mybatis–>编写代码–>测试

2.1环境搭建

搭建数据库

create database `mybatis`;

use `mybatis`;
create table `user`(
   `id` int(20) not null primary key,
	 `name` varchar(30) default null,
	 `pwd` varchar(30) default null
)engine=innodb default charset=utf8;

insert into `user` values
(1,'张三','123456'),
(2,'李四','123456'),
(3,'王五','123456')

新建项目

1.新建一个普通的maven项目,并删除他的src目录。

2.导入依赖

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

3.新建子模块

4.在resources目录下添加配置文件mybatis-config.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"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

5.编写mybatis工具类

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

    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.2编写代码

  • 实体类 User

    public class User {
        private int id;
        private String name;
        private String 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;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
    
  • Dao接口 UserDao

    public interface UserDao {
        List<User> getUserList();
    }
    
  • 接口实现类由原来的UserDaoImpl变为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">
        <select id="getUserList" resultType="pojo.User">
        select * from mybatis.user;
      </select>
    </mapper>
    

namespace的作用是绑定接口,相当于implements

id是方法名

resultType是返回的类型所对应的类

2.3代码测试

public class userDaoTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //方式一:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();
        //方式二:
        //List<User> userList = sqlSession.selectList("dao.UserDao.getUserList");
        for(User user:userList){
            System.out.println(user);
        }
        sqlSession.close();

    }
}

运行后报错
在这里插入图片描述

注意:编写完UserMapper.xml后要去核心配置文件mybatis-config.xml中注册

接着运行,接着报错
在这里插入图片描述

原因:maven项目导出资源文件失败

在pom.xml中添加以下配置

<build>
    <resources>
        <resource>

            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

运行成功
在这里插入图片描述

3.CRUD

  • 在接口中添加方法

    public interface UserDao {
        List<User> getUserList();
        User getUserById(int id);
        int addUser(User user);
        int updateUser(User user);
        int deleteUser(int id);
    
    }
    
  • 在UserMapper中添加对应的标签

    <?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">
        <select id="getUserList" resultType="pojo.User">
            select * from mybatis.user;
        </select>
        <select id="getUserById" resultType="pojo.User" parameterType="int">
            select * from mybatis.user where id=#{id};
        </select>
        <insert id="addUser" parameterType="pojo.User">
            insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd});
        </insert>
        <update id="updateUser" parameterType="pojo.User">
            update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
        </update>
        <delete id="deleteUser" parameterType="int">
            delete from mybatis.user where id=#{id};
        </delete>
    
    </mapper>
    

这里要注意标签的类型要和sql语句的一致,我一开始就是因为把所有的标签都写成了导致出错。

  • 编写对应的测试方法

    public class userDaoTest {
        @Test
        public void test(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            //方式一:getMapper
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
            //方式二:
            //List<User> userList = sqlSession.selectList("dao.UserDao.getUserList");
            for(User user:userList){
                System.out.println(user);
            }
            sqlSession.close();
    
        }
    
        @Test
        public void test2(){
            SqlSession sqlSession=MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            userDao.addUser(new User(4,"赵六","123456"));
            sqlSession.commit();
            sqlSession.close();
        }
        @Test
        public void test3(){
            SqlSession sqlSession=MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            userDao.updateUser(new User(4,"杨幂","654321"));
            sqlSession.commit();
            sqlSession.close();
        }
        @Test
        public void test4(){
            SqlSession sqlSession=MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            userDao.deleteUser(4);
            sqlSession.commit();
            sqlSession.close();
        }
        @Test
        public void test5(){
            SqlSession sqlSession=MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = userDao.getUserById(2);
            System.out.println(user);
            sqlSession.close();
        }
    }
    

注意点:1.增删改这三种操作需要提交事务

​ 2.parameterType是参数类型,resultType是返回值类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值