黑马程序员技术交流社区

标题: 【广州校区】+【原创】mybatis入门 [打印本页]

作者: 余大麻    时间: 2018-10-11 12:06
标题: 【广州校区】+【原创】mybatis入门
Mybatis介绍Mybatis入门程序mybatis下载业务需求环境搭建
[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>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>


创建pojosql映射文件
[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:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="test">
</mapper>



加载映射文件
[XML] 纯文本查看 复制代码
<mappers>
    <mapper resource="sqlmap/User.xml" />
</mappers>


创建测试类测试程序
[Java] 纯文本查看 复制代码
public class MyBatisDemo1 {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void testJunit() throws IOException {
        String resource = "SqlMapConfig.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        //InputStream is = this.getClass().getClassLoader().getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    }
    @Test
    public void findUserById() {//实现根据id查询用户
        SqlSession session = sqlSessionFactory.openSession();
        User user = session.selectOne("test.selectUserById",10);
        System.out.println(user);
        session.close();
    }
    @Test
    public void findUserByUserName() {//实现根据用户名模糊查询用户
        SqlSession session = sqlSessionFactory.openSession();
        List<User> selectList = session.selectList("test.selectUserByUserName", "王");
        for (User user : selectList) {
            System.out.println(user);                       
        }
        session.close();
    }
    @Test
    public void insertNewUser() {//实现添加用户
        SqlSession session = sqlSessionFactory.openSession();
        User user = new User("二狗", "男", new Date(), "二狗街道");
        int row = session.insert("test.insertNewUser", user);
        System.out.println(user.getId());
        "需要进行事务提交"
        session.commit();
        session.close();
    }
    @Test
    public void updateUser() {//修改用户
        SqlSession session = sqlSessionFactory.openSession();
        User user = new User(29,"二狗", "女", new Date(), "二狗新街");
        int row = session.insert("test.updateUser", user);
        System.out.println(row);
        session.commit();
        session.close();
    }
    @Test
    public void delUser() {//删除用户
        SqlSession session = sqlSessionFactory.openSession();
        int row = session.insert("test.delUser", 29);
        System.out.println(row);
        session.commit();
        session.close();
    }
}
<mapper namespace="test">
    <select id="selectUserById" parameterType="Integer" resultType="com.itcast.mybatis.domian.User">
        SELECT * FROM user where id = #{id}
    </select>
    <select id="selectUserByUserName" parameterType="String" resultType="com.itcast.mybatis.domian.User">
        SELECT * FROM user where username like "%"#{username}"%";
    </select>
    <insert id="insertNewUser" parameterType="com.itcast.mybatis.domian.User">
        <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="Integer">
            SELECT LAST_INSERT_ID();
        </selectKey>
        insert into user (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
    <update id="delUser" parameterType="Integer">
        delete from user where id = #{id}
    </update>
</mapper>




Mybatis与Hibernate的区别(面试)Dao开发方法1.原始Dao
[Java] 纯文本查看 复制代码
public class UserDaoImpl implements UserDao {
    @Autoware
    private SqlSessionFactory sqlSessionFactory;
    "通过用户ID查询一个用户"
    public User selectUserById(Integer id){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession.selectOne("test.findUserById", id);
    }
}


2.Mapper动态代理
[Java] 纯文本查看 复制代码
public interface UserMapper {
    public User findUserById(Integer id);
}


[Java] 纯文本查看 复制代码
@Autoware
private SqlSessionFactory sqlSessionFactory;
public void testMapper() throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    System.out.println(userMapper.findUserById(10));
    sqlSession.commit();
    sqlSession.close();
}


SqlMapConfig.xml配置文件properties
[XML] 纯文本查看 复制代码
<properties resource="db.properties">
    <!-- 在properties内部用property定义属性 -->
    <!-- 如果外部配置文件有该属性,则内部定义属性被外部属性覆盖 -->
    <property name="jdbc.username" value="root123" />
    <property name="jdbc.password" value="root123" />
</properties>
<environments default="development">
    <environment id="development">
        <!-- 使用jdbc事务管理 -->
        <transactionManager type="JDBC" />
        <!-- 数据库连接池 -->
        <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>


typeAliases(类型别名)
[XML] 纯文本查看 复制代码
<typeAliases>
    <!-- 单个别名定义 -->
    <typeAlias alias="user" type="cn.itcast.mybatis.pojo.User" />
    <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
    <package name="cn.itcast.mybatis.pojo" />
    <package name="其它包" />
</typeAliases>




mappers
[XML] 纯文本查看 复制代码
<mappers>
    <mapper resource="sqlmap/User.xml" class="" url=""/>
    <mapper class="com.itheima.mybatis.mapper.UserMapper" />
    "此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中"
    <package name="com.itheima.mybatis.mapper"/>
    "此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中"
    <mapper url="决定地址,不实用" />
</mappers>












欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2