mybatis基于xml配置和注解配置的入门小案例

mybatis是用Java编写的一个持久层框架,它封装了JDBC操作的很多细节,使开发者只需要关注sql语句本身,并且使用了ORM(对象关系映射)思想实现了结果集的封装。
一、mybatis基于xml的基本使用:
1、导入mybatis和数据库驱动jar包,以及log4j的jar包(记录日志,非必须);
2、创建实体类和dao接口,实体类中的属性需要与数据库列名严格对应;
3、创建mybatis的主配置文件和mybatis的映射配置文件,并导入log4j.properties文件(非必须);
主配置文件代码:

<?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>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb1?serverTimezone=GMT%2B8"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123456"></property>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/itmao/dao/IUserDao.xml"></mapper>
        <!--可以通过package标签指定dao接口所在的包,
        当指定后就不需要写mapper标签了,两者作用相同
	<package name="com.itmao.dao"></package>-->
    </mappers>
</configuration>

PS:
1)其中关于数据库连接的信息可以单独写一个properties配置文件存储,这样在配置环境之前可以先写一个properties标签引用:

<!--配置外部properties文件,resource用于指定配置文件的位置,
是按照类路径的写法来写,并且也必须存在于类路径之下--->
<properties resource="jdbcConfig.properties"></properties>

然后在配置数据库连接信息时通过el表达式获取:

<property name="driver" value="${jdbc.driver}"></property>

2)在使用dataSource 标签配置数据源时,其属性type表示是否使用连接池,有三个值:POOLED:表示采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对此规范的实现(不是DBCP或C3P0连接池,而是mybatis自定义的连接池);UNPOOLED:采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想;JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同服务器拿到的DataSource是不一样的。通常使用POOLED。
3)在最后指定配置文件位置时,可以使用package标签,这样主配置文件就能得到所提供路径下的所有映射配置文件:

<package name="com.itmao.dao"></package>

因为实际开发中不止一个实体类,也就不止一个dao接口,也就不止一个映射配置文件,这时用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.itmao.dao.IUserDao" >
    <!--配置查询所有-->
    <select id="findAll" resultType="com.itmao.model.User">
        select * from user
    </select>
</mapper>

4、测试类中的代码:

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

测试类中的代码分析 :
1、读取配置文件:不能使用绝对路径和相对路径,而是使用类加载器,因为它只能读取类路径下的配置文件,或者使用ServletContext对象的getRealPath()方法获取文件真实路径。
2、创建工厂使用了构建者模式,即把创建对象的细节隐藏,让使用者直接调用方法即可拿到对象。
3、生产SqlSession使用了工厂模式,可以降低类之间的依赖关系(解耦)。
4、创建dao接口实现类使用了代理模式,使得在不修改源码的基础上就对方法增强。

环境搭建的注意事项:
1.创建IUserDao.xml和IUserDao.java时名称是为了和之前的知识保持一致。在mybatis中,它把持久层的操作接口名称和映射文件都叫做:mapper,所以IUserDao和IUserMapper是一样的。
2.在idea中创建包和目录是不一样的:
创建包使用:com.itmao.dao是三级目录;
创建目录使用:com.itmao.dao是一级目录。
3.mybatis的映射配置文件位置必须和dao接口的包结构相同,所以在创建映射配置文件的目录时,必须在resource文件夹中将com/itmao/dao逐个创建。
4.映射配置文件的mapper标签的namespace属性值必须是dao接口的全限定类名。
5.映射配置文件的操作配置(如select标签)的id属性值必须是dao接口的方法名,并且需要在resultType属性中指定实体类的全限定类名,否则mybatis不知道封装到哪里会报错。

当我们遵从了3、4、5事项后,我们在开发中就无需再写dao的实现类。
二、mybatis基于注解的基本使用:
1、在基于xml使用的基础上,删除映射配置文件,在dao接口的方法上使用相应注解(@Select,@Update,@Insert,@Delete),并且在注解中指定sql语句:

@Select("select * from user")
List<User> findAll();

2、在主配置文件中的mapper标签中,使用class属性指定dao接口的全限定类名:

<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名-->
<mappers>
    <!--<mapper resource="com/itmao/dao/IUserDao.xml"></mapper>-->
    <mapper class="com.itmao.dao.IUserDao"></mapper>
</mappers>

虽然mybatis是支持写dao实现类的,但是写实现类反而会增加代码量。我们在实际开发中,都是越简便越好,所以不管使用xml还是注解配置,都是采用不写dao实现类的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以将数据库操作与Java对象之间的映射关系进行配置,提供了一种简单且灵活的方式来访问数据库。 在MyBatis中,XML配置文件是配置映射关系的主要方式。下面是一个简单的MyBatis XML配置文件的示例: ```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 type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> ``` 上述配置文件中包含了以下几个重要的配置项: 1. `<environments>`:定义了环境配置,可以配置多个环境,通过`default`属性指定默认环境。 2. `<transactionManager>`:定义了事务管理器的类型,这里使用的是JDBC事务管理器。 3. `<dataSource>`:定义了数据源的类型和相关属性,这里使用的是连接池数据源(POOLED)。 4. `<mappers>`:定义了映射器(Mapper)的配置,可以通过`resource`属性指定映射器的XML文件路径。 在`<mappers>`标签中,可以通过`<mapper>`标签来引入映射器的配置文件。下面是一个简单的映射器配置文件的示例: ```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.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.model.User"> SELECT * FROM user WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.model.User"> INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.model.User"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUser" parameterType="int"> DELETE FROM user WHERE id = #{id} </delete> </mapper> ``` 上述映射器配置文件中定义了一些SQL语句,通过`<select>`、`<insert>`、`<update>`和`<delete>`标签来配置对应的SQL操作。其中,`id`属性指定了SQL语句的唯一标识,`parameterType`属性指定了参数类型,`resultType`属性指定了返回结果的类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值