返回顶部
扩大
缩小

Yeap

Mybatis-01

使用Mybatis的思路流程:

  • 搭建环境
    • 数据库环境

    • 导入相应的jar包 Maven 项目:pom依赖中到入相应的依赖

      <dependencies>
              <!--mysql驱动-->
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.21</version>
              </dependency>
              <!--mybatis依赖-->
              <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
              <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis</artifactId>
                  <version>3.5.6</version>
              </dependency>
      <dependencies>
      
    • 编写核心配置文件: 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>
          <!--引入外部配置文件-->
          <properties resource="db.properties"/>
          <!--起别名-->
          <typeAliases>
              <!--给类起别名 就要使用具体的 alias-->
              <!-- <typeAlias type="com.yp.pojo.User" alias="User"/> -->
              <!--扫描包的时候,默认使用 (pojo)实体类首字母小写的类名-->
              <package name="com.yp.pojo"/>
          </typeAliases>
      
        
          <environments default="development">
              <environment id="development">
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="${driver}"/>
                      <!--url: jdbc:mysql://localhost:3306/yinliu?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true -->
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>
                  </dataSource>
              </environment>
          </environments>
      
          <!--每一个mapper.xml都要在配置文件中注册-->
          <mappers>
              <!--mapper 映射器:  方式一 MapperRegister(mapper注册)     	
      							路径正确就可用
                    推荐使用
              -->
              <!--  <mapper resource="com/yp/dao/UserMapper.xml"/>-->
            
              <!-- 方式二 通过 class文件来映射
                      注意点: 接口和它的配置文件,必须同名
                              接口和它的mapper配置文件,必须在同一个包下
              -->
      				<!-- <mapper class="com.yp.dao.UserMapper"/> -->
            
              <!--方式三
                  通过扫描包来绑定:
                  注意点: 接口和它的配置文件,必须同名
                             接口和它的mapper配置文件,必须在同一个包下
              -->
              <package name="com.yp.dao"/>
          </mappers>
      </configuration>
      
    • 编写db.properties配置文件

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8
    username=root
    password=123456
    
    • 编写工具类 Utils -> MybatisUtils.java
    public class MybatisUtils {
    
        private  static SqlSessionFactory sqlSessionFactory;
    
        static {
            try {
                //1,加载配置文件
                String resource = "mybatis-config.xml";
                //2,以流的方法读取配置文件
                InputStream  inputStream = Resources.getResourceAsStream(resource);
                //3. SqlSessionFactoryBuilder 获取 (sqlSessionFactory)加载工厂
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
      
        // 获取SQLSession连接
        public static SqlSession getSession(){
    				// true 是让sqlSession 开启自动提交事务
            return  sqlSessionFactory.openSession(true);
        }
    
    
    • 编写实体类(pojo)

    • 编写dao(操作数据库)

    //接口类
    public interface UserMapper {
        //查询所有用户
        List<User> getUserList();
        //根据 id 查询用户
        User getUserById(int id);
        // insert 一个用户
        int addUser(User user);
        // 修改用户
        int updateUser(User user);
        // 删除用户
        int deleteUser(int id);
    }
    
    //接口的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">
    <!--这里的xml文件,就是User接口的实现类
        出现找不到 xml 文件的时候 在配置文件中 添加文件过滤
    -->
    
    <!--namespace绑定对应的接口-->
    <mapper namespace="com.yp.dao.UserMapper">
        <!--select查询语句-->
    
        <!--id: 就是之前dao的重写的方法名
        resultType: 写的是集合中泛型的东西
        -->
        <select id="getUserList" resultType="hello">
            select * from mybatis.user;
        </select>
    
        <select id="getUserById" parameterType="int" resultType="com.yp.pojo.User" >
            select * from mybatis.user where  id = #{id} ;
        </select>
         <!--涉及到模糊时 为了避免sql注入可以将select语句写成 
          	      select * from foo where bar like "%"#{value}"%"
          -->
        <insert id="addUser" parameterType="com.yp.pojo.User">
            insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
        </insert>
          
        <update id="updateUser" parameterType="com.yp.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>
    
    

    当出现找不到文件的时候,是Maven的静态资源过滤出现了问题!在pom文件中添加文件过滤配置

    <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
        </build>
    
    • 编写测试类:文件结构要和待测试文件的目录结构相同
    public class UserMapperTest {
    	// 如果没有开启自动提交事务,一定要在操作结束后 commit
        @Test
        public void test() {
            SqlSession session = null;
    
            try {
                //1,获取sqlSession连接对象
                session = MybatisUtils.getSession();
                //2,执行sql  通过getMapper方法 获取 UserMapper类中的 sql语句
                UserMapper mapper = session.getMapper(UserMapper.class);
                // 方式一,getMapper,getUserList()这是一个方法
                List<User> userList = mapper.getUserList();
    
                //方式二:
    //        List<User> userList = session.selectList("com.yp.dao.UserMapper.getUserList");
    
                for (User user : userList) {
                    System.out.println(user);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
    
            } finally {
                //关闭sqlSession
                session.close();
            }
        }
    
    
        @Test
        public void getUserById() {
            //获取sqlsession连接
            SqlSession session = MybatisUtils.getSession();
            // 获取mapper
            UserMapper mapper = session.getMapper(UserMapper.class);
            // 调用方法 获取查询的信息
            User userById = mapper.getUserById(1);
    
            System.out.println(userById);
    
            session.close();
        }
    
        // 增、删、改 的事件需要提交事务
        @Test
        public void addUser() {
            SqlSession session = MybatisUtils.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
    
            int man = mapper.addUser(new User(4, "赵六", "123456"));
            if (man > 0) {
                System.out.println("插入成功!");
            }
    
    
            //提交事务
            session.commit();
    
            session.close();
    
        }
    
    
    
        @Test
        public void updateUser() {
            SqlSession session = MybatisUtils.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.updateUser(new User(4, "垃圾", "123456"));
    
            session.commit();
    
            session.close();
        }
    
        @Test
        public void deleteUser() {
            // 获取连接
            SqlSession session = MybatisUtils.getSession();
            // 获取接口
            UserMapper mapper = session.getMapper(UserMapper.class);
            // 调用方法
            mapper.deleteUser(4);
    
            //一定要提交事务
            session.commit();
    
            session.close();
    
        }
    
    }
    

posted on 2021-01-06 17:01  YP泡泡  阅读(37)  评论(0)    收藏  举报

导航