mybatis

ORM Object Relational Mappging 对象关系映射
简单说:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

mybatis 的入门
mybatis的环境搭建
第一步:创建maven功能。并导入坐标

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

第二步:创建实体类和dao接口
第三步:创建Mybatis的主配置文件 在resources文件夹里面创建SqlMapConfig.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">
<!-- mybatis的主配置环境-->
<configuration>
    <!-- 别名,对数据对象操作全名太长,需要使用别名 -->
    <typeAliases>
        <!--<typeAlias type="bean.UserMapper" alias="userMapper"/>-->
        <!--直接使用类名即可,对于整个包的路径配置(别名),简单快捷 -->
        <package name="com.qf.dao.UserMapper"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <!--数据连接池-->
            <dataSource type="POOLED">
                <property name="url" value="jdbc:mysql:///java1907?useSSL=false"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射配置文件的位置,映射配置文件。指的是每个dao的独立的配置文件-->
    <mappers>
        <mapper resource="com/qf/dao/UserMapper.xml"/>

    <!--使用mybatis注解的方式,直接指向接口 <mapper class="com.qf.dao.UserMapper"/>-->
    </mappers>
</configuration>

第四步:创建映射配置环境
mapper resource=“com/qf/dao/UserMapper.xml”></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">
<mapper namespace="com.qf.dao.UserMapper">
	<!--#{}表示占位符?,parameterType接收简单类型的参数时,里面的名称可以任意
		${}表示拼接符,parameterType接收简单类型的参数时,里面的名称必须是value
		id="方法名称" resultType="返回值类型"
-->
<!--如果在myBatis主配置环境里没有typeAliases别名设置的话。这里可以自己映射
resultMap id="UserMapper" 要与 sql代码块的 resultMap="UserMapper" 一致
-->
    <resultMap id="UserMapper" type="Student">
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <result column="sage" property="age"/>
    </resultMap>
    
    <select id="seleUser" resultType="com.qf.dao.User" resultMap="UserMapper">
        select * from admin where id=#{id}
    </select>
    <insert id="addUser">
    //添加完对象后,可以查询出对象的id值。
    <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
        select last_insert_id();
    </selectKey>
    insert into admin(id,username,password,time)values(#{id},#{username},#{password},#{time})

    </insert>
<!--根据id修改-->
    <update id="upDate">
        update admin set username=#{username}  where id=#{id}
    </update>
<!--查询总数据条数-->
    <select id="DataCount" resultType="java.lang.Integer">
    select count(id) from admin
    </select>
<!--模糊查询-->
    <select id="seleLike" resultType="com.qf.dao.User">
        select * from admin where username like #{username}
    </select>
<!--分页查询-->
    <select id="pageData" resultType="com.qf.dao.User">
        select * from admin limit #{start},#{pageSize}
    </select>
</mapper>

dao层的UserMapper接口

public interface UserMapper {
    //查询所有
    List<User> findAll();

   // @Insert("insert into  admin(id,username,password) values(#{id},#{username},#{password})")
    void addUser(User user);
    //根据id查询
    User seleUser(int id);
    //修改
    void upDate(User user);
    //查询总数据条数
    int DataCount();
    //模糊查询
    List<User> seleLike(String username);
    //分页查询
    List<User> pageData(HashMap<String,Integer> hashMap);
}

测试类Dome

public class Dome {
        InputStream in = null;
        SqlSession session=null;
        SqlSessionFactoryBuilder builder=null;
        SqlSessionFactory factory=null;
    @Before
    public void init(){
        try {
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.创建SqlSessionFactory工厂
        builder = new SqlSessionFactoryBuilder();
         factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        session = factory.openSession();
    }

    @Test
    //分页查询
    public void testPageData(){
        UserMapper mapper = session.getMapper(UserMapper.class);
        HashMap<String, Integer> objectObjectHashMap = new HashMap<String, Integer>();
        objectObjectHashMap.put("start",0);
        objectObjectHashMap.put("pageSize",2);
        List<User> users = mapper.pageData(objectObjectHashMap);
        for (User user:users) {
            System.out.println(user);
        }
    }
    @After
    public void destroy(){
        session.close();
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    //模糊查询
    public void testSeleLike(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> users = mapper.seleLike("%" + "j" + "%");
        for (User user: users) {
            System.out.println(user);
        }

    }

    @Test
    //总共有多少条数据
    public void testDataCount(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.DataCount();
        System.out.println(i);
    }
    @Test
    //修改
    public void testUpDate(){
        //1.读取配置文件
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //5.使用代理对象执行方法

        User user=new User();
        user.setId(1);
        user.setUsername("haha");
        userMapper.upDate(user);
        session.commit();
        //6.释放资源
        session.close();
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    //查询
    public void testSeleUser(){
        //1.读取配置文件
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //5.使用代理对象执行方法
        User user = userMapper.seleUser(1);
        System.out.println(user);
        //6.释放资源
        session.close();
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //查询所有
    public static void main(String[] args){
        //1.读取配置文件
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //5.使用代理对象执行方法
        List<User> users = userMapper.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

环境搭建注意事项:

  1. 在mybatis中他把dao层操作接口名称和映射文件叫做Mapper,有的叫做dao 有的叫做mapper。
  2. 在idea中创建目录的时候,他和包是不一样的。包在创建时是三级结构。目录在创建时也要是三级结构。
  3. 映射配置文件的 mapper标签的namespace属性的值。必须是dao接口的 包名加类名。
  4. 映射配置文件的操作配置 select标签的 id属性值必须是dao接口的方法名

Mybatis框架的原理介绍

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值