1 - Hello MyBatis

1 Hello MyBatis

1.1 Demo
  1. 导入依赖(MySQL驱动,mybaits)
  2. User实体类
  3. UserMapper.xml 映射配置文件
  4. SqlMapConfig.xml 核心配置文件
    • 数据库环境变配置
    • 引入映射关系的配置
  5. 测试代码
    • 加载核心配置文件
    • 获取sqlSessionFactory工厂对象
    • 获取sqlSession会话对象
    • 执行sql
    • 释放资源

pom.xml
<!--引入mybatis依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>

<!--引入mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!--引入junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
User
@Data
@ToString
public class User {
    // 属性名需要和数据库字段一一对应
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
}
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="UserMapper">
    <!--查询所有-->
    <select id="findAll" resultType="com.dy.domain.User">
        select * from user
    </select>
</mapper>

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">
<configuration>
    <!--加载properties文件-->
    <properties resource="jdbc.properties"/>

    <!--设置别名-->
    <typeAliases>
        <!--方式二:批量起别名 别名就是类名,且不区分大小写-->
        <package name="com.dy.domain"/>
    </typeAliases>
    
<!--    <plugins>-->
<!--        &lt;!&ndash; 分页助手的插件 &ndash;&gt;-->
<!--        <plugin interceptor="com.github.pagehelper.PageHelper">-->
<!--            &lt;!&ndash; 指定方言 &ndash;&gt;-->
<!--            <property name="dialect" value="mysql"/>-->
<!--        </plugin>-->
<!--    </plugins>-->

    <!--environments: 运行环境-->
    <environments default="development">
        <environment id="development">
            <!--当前的事务事务管理器是JDBC-->
            <transactionManager type="JDBC"/>
            <!--数据源信息 POOLED:使用mybatis的连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入映射配置文件-->
    <mappers>
        <!-- 单独加载 -->
        <mapper resource="com/dy/mapper/UserMapper.xml"/>
        <!--批量加载映射-->
        <package name="com.dy.mapper"/>
    </mappers>
</configuration>

jdbc.properties(数据库参数)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis_db
jdbc.username=root
jdbc.password=root
测试文件
@Test
public void testFindAll() throws Exception {
    // 加载核心配置文件
    InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
    // 获取SqlSessionFactory工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    // 获取SqlSession会话对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 执行sql namespace="UserMapper" -> id="findAll"
    List<User> list = sqlSession.selectList("UserMapper.findAll");
    for (User user : list) {
        System.out.println(user);
    }
    // 释放资源
    sqlSession.close();
}

idea可能存在 resource下的资源没输出,pom中配置一下

    <build>
        <!-- resources-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
1.2 增删改查 UserMapper.xml

在这里插入图片描述

insert
  • 插入语句使用insert标签
  • 在映射文件中使用parameterType属性指定要插入的数据类型
  • Sql语句中使用#{实体属性名}方式引用实体中的属性值
  • 插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
  • 插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即
    sqlSession.commit()
    <!--新增-->
    <insert id="save" parameterType="com.dy.domain.User">
        insert into user(username, birthday, sex, address)
        values (#{username}, #{birthday}, #{sex}, #{address})
    </insert>
    @Test
    public void testSave() throws Exception {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 获取SqlSession会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行sql
        User user = new User();
        user.setUsername("jack");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("北京海淀");
        sqlSession.insert("UserMapper.save", user);
        // DML语句,手动提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }
update
  • 修改语句使用update标签
  • 修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);
    <!--修改-->
    <update id="update" parameterType="com.dy.domain.User">
        update user
        set username = #{username},
            birthday = #{birthday},
            sex      = #{sex},
            address  = #{address}
        where id = #{id}
    </update>
    @Test
    public void testUpdate() throws Exception {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new
                SqlSessionFactoryBuilder().build(is);
        // 获取SqlSession会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行sql
        User user = new User();
        user.setId(4);
        user.setUsername("lucy");
        user.setBirthday(new Date());
        user.setSex("女");
        user.setAddress("北京朝阳");
        sqlSession.update("UserMapper.update", user);
        // DML语句,手动提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }
delete
  • 删除语句使用delete标签
  • Sql语句中使用#{任意字符串}方式引用传递的单个参数
  • 删除操作使用的API是sqlSession.delete(“命名空间.id”,Object);
<!--删除-->
<delete id="delete">
    delete from user where id = #{id}
</delete>
@Test
public void testDelete() throws Exception {
    // 加载核心配置文件
    InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
    // 获取SqlSessionFactory工厂对象
    SqlSessionFactory sqlSessionFactory = new
            SqlSessionFactoryBuilder().build(is);
    // 获取SqlSession会话对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 执行sql
    sqlSession.delete("UserMapper.delete", 50);
    // DML语句,手动提交事务
    sqlSession.commit();
    // 释放资源
    sqlSession.close();
}
1.3 核心配置文件 sqlMapConfig.xml

MyBatis 的配置文件 官网

[常用配置](# UserMapper.xml (映射配置文件))

1.4 MyBatis代理开发方式(重要)

在这里插入图片描述
在这里插入图片描述

UserMapper 接口

// 根据id查询用户
User findUserById(int id);

UserMapper.xml 映射配置文件

<!--根据id查询用户-->
<select id="findUserById" parameterType="int" resultType="com.dy.domain.User">
    select * from user where id = #{id}
</select>

Test

@Test
public void testFindById() throws Exception {
    // 加载核心配置文件
    InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
    // 获得SqlSessionFactory工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    // 获得SqlSession会话对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 获得Mapper代理对象
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    // 执行查询
    User user = userMapper.findUserById(3);
    System.out.println(user);
    // 释放资源
    sqlSession.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值