第一个mybatis程序

思路 搭建环境->导入myBatis->编写代码-》测试

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(id,name,pwd)VALUES
(1,'狂神','123456'),
(2,'张三','123'),
(3,'李四','123')

  •  新建项目

    1.新建maven新项目

    2.删除src目录

    3.导入maven依赖

  • 创建一个模块

1.编写mybatis核心配置文件

2.编写mybatis工具类

复制代码
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
static {

    try {
        //使用mybatis第一步获取slqSession对象
        String resource = "mybatis-config.xml";
        InputStream     inputStream = Resources.getResourceAsStream(resource);
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例
    //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    public static SqlSession getSqlsession(){

        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession ;
    }

}
复制代码
  • 编写代码

    • 实体类

      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接口

      public interface UserDao { List <User> getUserList(); }

       

    • 接口实现类由原来的impl转换为一个mapper文件

      复制代码
      <?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">
      <!--namespace绑定一个对应的dao接口或这mapper接口-->
      <mapper namespace="dao.UserDao">
      <!--    select查询语句-->
          <select id="getUserList" resultType="pojo.User">
              select * from mybatis.user
          </select>
      </mapper>

      复制代码

       

  • 测试

    • 注意点

 

        org.apache.ibatis.binding.BindingException: Type interface dao.UserDao is not known to the MapperRegistry.

MapperRegistry

每一个都要注册

 <mappers>
        <mapper resource="dao.UserMapper.xml"/>
    </mappers>

 

开启资源过滤

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

 

 

 

    • junit测试

   

复制代码
public class UserDaoTest {
    @Test
    public void tets(){
        //第一步,获取SqlSession对象
        SqlSession sqlsession = MybatisUtils.getSqlsession();
        //第二部,执行sql
        //方式一getmapper
        UserDao mapper = sqlsession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlsession.close();
    }
}
复制代码
  • useSSL=false和true的区别:

       SSL(Secure Sockets Layer 安全套接字协议),在mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false!!!,useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false!!!

设置编码格式

jdbc:mysql://localhost:3306/test?useSSL=false
characterEncoding=utf-8&amp  useUnicode=true&characterEncoding=UTF-8

 

mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

1. 存数据时:

     数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

2.取数据时:

     在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

注意:在xml配置文件中配置数据库utl时,要使用&的转义字符也就是&

posted @   明眸清澈  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示