mybatis-01-简单概述基础点

1、mybatis的优点

mybatis:半自动化持久化框架

  • sql(专注数据)和java编码(专注业务)分离
  • 可使用简单的xml或者注解用于配置和原始映射
  • 将接口和java中的pojo映射成数据库中的记录
  • 可以理解为:业务代码+底层数据库的媒介

2、创建mybatis的步骤(一)---配置

  1. 创建数据库、建表
  2. 搭建开发环境
  3. 导入jar包  

    log4j-1.2.17.jar

    mybatis-3.4.1.jar

    mysql-connector-java-5.1.7-bin.jar

  4. 添加配置文件

    mybatis-config.xml

  5. log4j.properties配置文件(建议加上)
    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

     最终结构可参照下方图片:

3、创建mybatis的步骤(二)---代码

创建pojo对象User

public class User {
    private int id;
    private String lastName;
    private int sex;
}

 ②在src目录创建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 数据源
                    POOLED    表示使用数据库连接池
             -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />  (此处填写数据库名称)
                <property name="username" value="root" />  (数据库用户名)
                <property name="password" value="root" />  (数据库密码)
            </dataSource>
        </environment>
    </environments>
    <!-- 引入sql语句对应的配置文件 -->
    <mappers>
        <mapper resource="com/atguigu/pojo/UserMapper.xml" />  (根据自己UserMapper.xml的位置更改路径,也可以写成通用的包名)
    </mappers>
</configuration>

 ③创建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">
      <!-- 注释
        namespace 属性一般情况下。
             一种定义规则:
                 ①使用对流的javaBean的全类名
                 ②使用Mapper接口的全类名
       -->
<mapper namespace="com.atguigu.pojo.User">   (此处写全类名)
 <!-- 此处写相应的SQL语句 增删改查   -->
</mapper>

④配置mybatis配置文件的提示:

Config 文件的 key: http://mybatis.org/dtd/mybatis-3-config.dtd

mapper文件的key: http://mybatis.org/dtd/mybatis-3-mapper.dtd

  • 搜索xml  --双击子文件 XML Catalog
  • add--进行添加
  • key--输入对应的Configuration和mapper的约束条件(dtd文件)
  • URI---一定要选择URI
  • File System  选择本地对应的文件添加

可以按照图中的结构进行建包,进行编码测试

               

 ⑤创建UserMapper接口

public interface UserMapper {
    /*
     * 1、根据编号查询用户信息
     * 2、查询所有用户信息
     * 3、添加用户信息
     * 4、删除用户信息
     * 5、更新用户信息
     */
    public User findUserById(int id);
    
    public List<User> allFindUser();
    
    public int saveUser(User user);
    
    public int updateUser(User user);
    
    public int deleteUser(int id);
}

⑥创建UserMapperTest类

import java.io.IOException;
import java.sql.Connection;
import java.util.List;
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 org.junit.Before;
import org.junit.Test;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
(此处是通用代码)
@SuppressWarnings("unused")
public class UserMapperTest {
    private SqlSessionFactory factory;
    @Before
    public void before(){
        try {
            factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    @Test
    //根据id查找
    public void testFindUserById() {
        /*
         * 1.factory创建session
         * 2.session通过代理模式 创建Mapper的实体类
         * 3、mapper实体类执行方法 并获取返回值
         * 4、输出内容
         * 5、关流
         */
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = userMapper.findUserById(1);
        System.out.println(user);
        session.close();
    }

    @Test
    //查找所有
    public void testAllFindUser() {
        /*
         * 1.factory创建session
         * 2.session通过代理模式 创建Mapper的实体类
         * 3、mapper实体类执行方法 并获取返回值
         * 4、输出内容
         * 5、关流
         */
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List<User> list = userMapper.allFindUser();
        System.out.println(list);
        session.close();
    }
    
    @Test
    //添加
    public void testAddUser(){
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        int saveUser = userMapper.saveUser(new User(1,"冷清秋",1));
        session.commit();   (需要进行提交,||不提交的结果:运行成功,但数据库无值)
        System.out.println(saveUser);
        session.close();
    }
    
    @Test
    //修改
    public void testUpdateUser(){
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        int updateUser = userMapper.updateUser(new User(1,"zhangsan",0));
        session.commit();
        System.out.println(updateUser);
        session.close();
    }
    
    @Test
    //删除
    public void deleteUser() {
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        int deleteUser = userMapper.deleteUser(12);
        session.commit();
        System.out.println(deleteUser);
        session.close();
    }
}

对应的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="com.atguigu.mapper.UserMapper">
<!-- 
    namespace:名称空间(自定义名字)
    id:唯一标识
    resultType:返回值类型(写返回值类型的全类名)
    #{id}:从传递过来的参数中取出id值
 -->
 <!-- public User findUserById(int id); -->
<select id="findUserById" resultType="cn.aynu.pojo.User">
    select* from user where id = #{id}
</select>

<!-- public List<User> allFindUser(); -->
<select id="allFindUser" resultType="cn.aynu.pojo.User">
    select id,name,sex from user
</select>

<insert id="saveUser" parameterType="cn.aynu.pojo.User">
    insert into user(name,sex) values(#{name},#{sex})
</insert>

<update id="updateUser">
    update user set name = #{name},sex=#{sex} where id = #{id}
</update>

<delete id="deleteUser">
    delete from user where id = #{id}
</delete>
</mapper>

 敲小黑板:

1、当返回值是void的时候,resultType可以省略不写

2、当数据是基本数据类型的时候,resulttype可以省略不写

但是建议全部都加上,代码更规范,别人看之后通俗易懂,id和resultType一一对应  

***不加resultType的错误***

原文地址:https://www.cnblogs.com/zly123/p/11609591.html