Mybatis入门案例的实现

依赖导入
在这里插入图片描述

第一步:编写Mybatis的核心配置文件
放在resources目录下,官方建议命名:mybatis-config.xml

<?xml version="1.0" encoding="UTF8" ?>
<!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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mysql1"/>
                <property name="username" value="数据库用户名"/>
                <property name="password" value="数据库密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/man/dao/UserDao.xml"/>
    </mappers>
</configuration>

这一块有一个重要的点就是
environments default
这个是你要操作的数据库的名字
environment id 这个是下面要配置的数据库的名字
需要对应起来

第二步:编写接口
我以包目录结构为
在这里插入图片描述
来演示。

package mybatis.dao;

import mybatis.pojo.User;

import java.util.List;

public interface UserDao {
    //查找全部用户
    List<User> getUserList();
    //根据ID查找用户
    User getUserByID(int id);
    //insert 语句
    int addUser (User user);
    //修改用户
    int upDate (User user);
    //删除一个用户
    int deleteUser(int id);
}

接口里放的是一些抽象方法

第三步:编写接口实现类,即接口的xml文件

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.dao.UserDao">
    <select id="getUserList" resultType="mybatis.pojo.User">
        select * from mysql1.student
    </select>
    <select id="getUserByID" parameterType="int" resultType="mybatis.pojo.User">
        select * from  mysql1.student where id = #{id};
    </select>
</mapper>

这里面有几个要注意的点:
namespace是命名空间,里面要填写的是接口的全限定名称
id 对应的是接口内的方法名
resultType是对应的结果要封装的类型

写到现在,我们要将核心配置文件里的mapper在这里插入图片描述
的路径改为接口实现类xml文件的路径

第四步
编写 实体类
成员变量要和数据库表的数据类型对应,并且生成get,set方法,以及有参数,无参数的构造方法
以及to String的打印方法。

package mybatis.pojo;

public class User {
    private int id;
    private String name;
    private  String emain;
    private  int age;

    public User() {
    }

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

    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 getEmain() {
        return emain;
    }

    public void setEmain(String emain) {
        this.emain = emain;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

第五步:编写工具类
这里可以借鉴官方给的官方文档

package mybatis.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    //提升作用域
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //读取主配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

这里需要注意的是:try里的内容来自官方文档,try里第三行的地方我在代码块外定义,作用是提高作用域
其次里面还有一个getSqlSession方法,调用方法生成对象sqlSession。

第六步:编写测试类
在这里插入图片描述
在要测试的方法前加Test注解标注这是一个测试
然后第一行是调用工具类 中的方法生产sqlSession对象
接下来有两种方式,推荐第一种也是新的一种方法。
调用对象里的方法,将接口的类文件生成对象,接口不能直接创建对象。
调用对象中的getUserList()(即接口中的抽象方法)并将结果封装到结果集中
然后
采用for循环输出查询结果即可。

※经过个人测试,一般会出现以下问题,所以在此给出解决大部分问题的方法
最终的目录如下:
在这里插入图片描述

1️⃣java不会编译位于src下的xml文件,所以我们要将xml弄到target中class中对应的接口目录下
方法一:将xml复制,然后粘贴进对应位置
方法二:进行预编译,在这里插入图片描述
方法三:可以在pom文件中加入

    <!-- 在build中配置resources,防止资源导出失败的问题 -->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

可以解决无法找到xml文件的问题
报错方式一般是(con’t find XXX.xml)
2️⃣字符集的问题
有的电脑或者是IDEA的设置不同有时候会出现关于字符的问题
报错方式一般是(XX字符失效等等)
方法一:可以在xml文件中加入

//引入依赖
<!--    <properties>-->
<!--        &lt;!&ndash; 设置默认编码 &ndash;&gt;-->
<!--        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
<!--    </properties>-->

方法二:将xml文件中的UTF-8改为UTF8

3️⃣,关于空指针异常的问题。
自行百度,错误方式多种多样。

4️⃣
关于log4j.properties配置文件,即日志

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n


以上是入门案例

用Mybatis实现CRUD,增删改查
要实现这个功能只需要在实现完入门案例之后,增加接口中的方法,增加接口实现类中的sql语句,在测试类中增加测试方法

这是接口中的抽象方法
在这里插入图片描述

接下来要在接口实现类中添加sql语句
select:查

</select><select id="getUserByID" parameterType="int" resultType="mybatis.pojo.User">    select * from  mysql1.student where id = #{id};</select>

id:就是对应namespace中方法的名字

resultType:sql语句执行的返回值

parameterType:参数类型

insert:增

<insert id="addUser" parameterType="mybatis.pojo.User">    insert into mysql1.student(id, name, emain, age) values(#{id},#{name},#{emain},#{age})</insert>

update:改

<update id="upDate" parameterType="mybatis.pojo.User">    update mysql1.student    set  name=#{name},emain=#{emain},age=#{age}    where id=#{id};</update>

delete:删

<delete id="deleteUser" parameterType="int">    delete from mysql1.student where id=#{id};</delete>

接下来要在测试类中添加对应的测试方法
操作步骤类同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中增删改一定要提交事务,即sqlSession.commit();

这样就实现了增删改查。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值