`
woaiyingyu123
  • 浏览: 71162 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

(七)配置及用法之MyBatis

阅读更多
现在介绍一个算是半ORM框架的配置,那就是Mybatis。介绍mybatis的时候,我不想和Hibernate有过多的牵扯,虽然是有ORM的性质,但是还是分清楚点,以免混乱。。在这里,暂且不谈和Spring等框架的整合。下载Mybatis可以去http://code.google.com/p/mybatis/。本文中的一些标签内使用了类型别名,映射别名等,请参照上下文对比,积极尝试!
目前用到的包:asm-3.1.jar、cglib-2.2.jar、commons-logging-1.1.1.jar、log4j-1.2.13.jar、mybatis-3.0.5.jar、mybatis-3.0.5-javadoc.jar、mybatis-3.0.5-sources.jar、slf4j-api-1.5.8.jar、slf4j-log4j12-1.5.8.jar、mysql-connector-java-5.0.5-bin.jar
(1)使用到的持久化Bean:
public class Student {
	private Integer uid;
	private String studentName;
	private List<Score> score;//关联映射。
   //getter and setter 略
}

public class Score {
	private Integer sid;
	private String scoreName;
	private Student student;//关联映射
   //getter and setter 略
}

(1)mysql.properties的配置(设置具体数据源信息):
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybaties
username=root
password=123

(2)mysql-config.xml的配置:(mybatis配置文件,名字、路径随意)
<?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,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,mappers,详细用法参考文档,这里做简单介绍而已!

<properties resource="mysql.properties" />//通过这个配置,可以把数据源的属性定义放在资源文件里,实现动态配置
<!-- 设置类型别名,可把全路径名进行自定义简化,方便以后引用-->
<typeAliases>
	<typeAlias type="com.lrl.entity.Student" alias="StudentEntity" />
	<typeAlias type="com.lrl.entity.Score" alias="ScoreEntity" />
</typeAliases>
<!-- 环境的配置 -->
<environments default="development">//默认环境id(使用的是以下定义的develpment)
   <environment id="development">// 每个环境的id 
	<transactionManager type="JDBC" >
	</transactionManager>
	<!-- 数据源的定义-->
	<dataSource type="POOLED">//UNPOOLED每次请求简单打开关闭(慢),POOLED避免创建新链接的链接认证时间(快),JNDI(和Spring等使用)
	<property name="driver" value="${driver}" />//$引用资源文件里的属性
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
	</dataSource>
   </environment>
</environments>
<!-- 配置实体类映射器Mapper -->
<mappers>
	<mapper resource="com/lrl/entity/ScoreMapper.xml" />
</mappers>
</configuration>

(3)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要和映射器接口的全路径名相同(如果你打算使用接口的话) -->
<mapper namespace="com.lrl.dao.ScoreDao">
	<!-- Score映射结果集 -->
	<resultMap type="ScoreEntity" id="scoreResult">
		<id property="sid" column="sid" />
		<result property="scoreName" column="scoreName" />
   <!--类型关联-->
	<association property="student" column="uid" javaType="StudentEntity"
resultMap="studentResult" >//使用resultMap="studentResult"把两表属性联合在一起
            <id property="uid" column="uid"/> 
            <result property="studentName" column="studentName"/>
	</association>
        //association也可以这样写:
        <association property="student" column="uid" javaType="StudentEntity">//在里面添加属性,和使用resultMap="studentResult"性质一样
            <id property="uid" column="uid"/> 
            <result property="studentName" column="studentName"/>
	</association>
        //association还可以这样写:
        <association property="student" column="uid" javaType="StudentEntity"
	 	select="findStudentById" >//会照成N+1问题,不大好
        </association>
	</resultMap>
	<!-- Student映射结果集 -->
	<resultMap type="StudentEntity" id="studentResult">
		<id property="uid" column="uid" />
		<result property="studentName" column="studentName" />
		<collection property="score" ofType="ScoreEntity" >
			<id property="sid" column="sid" />
			<result property="scoreName" column="scoreName" />
		</collection>
	</resultMap>
       //PS:resultMap里还有<constructor></constructor><discriminator></discriminator>等标签,详情请参照文档,这里只是简介而已!
	<!-- 定义映射语句 ,id等价于方法名-->//resultType是返回类型,resultMap是映射结果集
	<select id="findById" parameterType="Integer" resultType="ScoreEntity">
		select
		* from Score s where s.sid=#{sid}//#{}会自动匹配参数,暂且这里面的命名随意,但是并不是所有的都随意的。所以建议还是根据实体类里的命名把
	</select>

	<select id="findScoreToStudent" parameterType="Integer"
		resultMap="scoreResult">
		select * from Score s left outer join Student u on
		s.uid=u.uid where s.sid=#{sid}//使用resultMap,可以进行表之间的级联关系,如果用resultType使用级联,则会空指针.
	</select>
	<select id="findStudentToScore" parameterType="Integer"
		resultMap="studentResult">
		select * from Student u left outer join Score s on
		u.uid=s.uid where u.uid=#{uid}
	</select>

	<update id="updateByEntity" parameterType="ScoreEntity">
		update Score s set s.scoreName=#{scoreName} where s.sid=#{sid}<!--
			这里#{}里的是ScoreEntity的属性,不能随意命名!
		-->
	</update>
//还有<insert></insert>,<delete></delete>标签等。希望自己动手尝试使用这些标签。
</mapper>

(4)映射器接口:
public interface ScoreDao {
	public Score findById(Integer sid);
	public Score findScoreToStudent(Integer sid);
	public void updateByEntity(Score score);
	public Student findStudentToScore(Integer uid);
}

//如果觉得在UserMapper.xml(映射器)配置<select></select><update></update>等映射语句麻烦。那么可以在接口的定义方法上面使用注解@Select、@Insert等如:
@Select("select * from Score s where s.sid=#{sid}")
public Score findById(Integer sid);

(5)测试:
String resource = "mysql-config.xml";
 Reader reader = Resources.getResourceAsReader(resource);//读取配置文件
 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//创建SqlSessionFactory,加载配置文件
 SqlSession session = sessionFactory.openSession(true);// true为设置自动提交事务,如果不设置,那么要使用session.commit()提交事务,否则更新插入等无效。
 ScoreDao scoreDao = session.getMapper(ScoreDao.class);//ScoreDao接口关联实际的映射器,注意映射器的namespace要和接口的全路径名一致。
 Score score = scoreDao.findById(1);
 System.out.println(score.getScoreName());//只对其一进行简单的测试

mybatis的基本配置如下,更深层次的使用请参照文档,文档在文章开始处的地址有下载的。如果有什么错漏的请留言,共同学习,谢谢!
分享到:
评论

相关推荐

    MyBatis主配置文件

    【MyBatis 主配置文件详解】 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。与传统的 JDBC 相比,MyBatis 简化了手动设置参数和获取结果集的过程,通过 XML 或注解进行映射,将接口和 ...

    mybatis配置及测试项目

    【标题】"mybatis配置及测试项目"是一个涵盖了MyBatis框架配置、MySQL数据库驱动以及日志设置的实践性项目,旨在帮助用户理解和掌握MyBatis的使用方法。在这个项目中,你将学习如何配置MyBatis以连接到MySQL数据库,...

    mybatis配置及架包

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"Mybatis配置及架包"中,我们主要会探讨以下几个关键知识点: 1. **...

    SpringMVC+Spring+MyBatis jar包和配置文件

    6. 配置Spring与MyBatis的集成:使用MyBatis-Spring的SqlSessionTemplate或SqlSessionFactoryBean。 在提供的压缩包中,文件可能包括Spring、SpringMVC和MyBatis的jar包,以及相关的配置文件,例如spring-context....

    springmvc+mybatis配置

    本文将详细讲解如何配置SpringMVC与MyBatis,并整合Oracle数据库。 **一、SpringMVC配置** 1. **添加依赖**:在项目中,首先需要引入SpringMVC的相关依赖。这通常通过Maven或Gradle来实现,添加对应的依赖库,如...

    spring和mybatis整合配置

    5. **编写Service层**:在Service层中,我们可以使用Spring的@Autowired注解来注入Mapper接口,然后调用其方法进行数据库操作。Service层是业务逻辑处理的主要场所。 6. **配置Spring MVC**:如果项目中还包含了...

    Mybatis-generator 生成Mybatis配置文件

    【Mybatis-generator 生成Mybatis配置文件】 ...总的来说,Mybatis Generator是提高开发效率的好帮手,通过合理的配置和使用,可以极大地简化Mybatis的初始化工作,让开发者更专注于业务逻辑的实现。

    springboot-mybatis配置20190819版本.zip

    总结,"springboot-mybatis"配置文件的创建涉及了SpringBoot的自动配置、数据库连接、Mybatis的使用、Mapper接口与XML映射、Service与Repository设计、事务管理和测试等多个环节,这些内容对于理解和实践SpringBoot...

    idea配置maven+Springboot+mybatis+oracle

    3. **使用Mapper**: 现在可以通过@Autowired直接注入Mapper接口,在业务逻辑中调用其方法执行SQL。 **六、运行与调试** 1. **启动Spring Boot应用**: 右键点击`main`方法,选择`Run 'XXXXX.main()'`,Spring Boot...

    spring + springmvc + mybatis 整合 及 mybatis-pagehelper分页

    在IT行业中,Spring、SpringMVC和MyBatis是三个非常重要的开源框架,它们在企业级Web应用开发中被广泛使用。Spring作为一个全面的后端应用程序框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地简化了...

    Mybatis中配置Mapper的方法

    本篇文章将深入探讨MyBatis中配置Mapper的方法。 1. XML配置方式: 在传统的MyBatis配置中,我们通常会在`mybatis-config.xml`文件中声明SqlSessionFactory,并在资源目录下的`mappers`子目录创建XML映射文件。...

    Spring+Spring MVC+MyBatis之零配置之路源代码

    这个"Spring+Spring MVC+MyBatis之零配置之路源代码"项目旨在展示如何在不使用XML配置的情况下,通过Java配置和注解驱动的方式来搭建一个完整的SSM(Spring、Spring MVC、MyBatis)应用。 Spring框架作为基础,提供...

    mybatis框架(基于配置)

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在基于配置的MyBatis框架中,主要涉及以下几个核心概念和功能: 1. **...

    spring+mybatis+atomikos配置文件及相关包(最新版)

    5. 配置MyBatis:配置MyBatis的SqlSessionFactory,使用Atomikos数据源,并在Mapper配置中启用事务。 6. 业务代码:在服务层方法上添加@Transactional注解,声明事务边界。 通过上述配置,Spring、MyBatis和...

    Mybatis配置示例代码

    除了XML配置,Mybatis还支持注解方式,可以直接在DAO接口方法上标注SQL语句,简化配置。例如: ```java @Select("SELECT * FROM user WHERE id = #{id}") User getUserById(@Param("id") int id); ``` 7. **...

    mybatis demo mybatis 实例

    4. README.md:项目说明文件,介绍项目的搭建、运行和使用方法。 通过这个实例项目,开发者可以从实践中学习MyBatis的使用,掌握如何配置MyBatis,如何编写Mapper接口和XML映射文件,以及如何在Java代码中调用...

    SpringBoot整合Mybatis完整详细版含注册、登录、拦截器配置

    在SpringBoot中集成Mybatis,我们需要在`pom.xml`添加Mybatis的依赖,配置`mybatis-config.xml`以定制Mybatis的行为,然后创建Mapper接口和Mapper XML文件,实现数据的CRUD操作。 3. **SpringBoot的配置文件** 在`...

    第三章 MyBatis的核心配置.docx

    MyBatis核心配置 MyBatis是一款流行的持久层框架,它提供了强大的配置机制,允许开发者灵活地配置和customization。第三章MyBatis的核心配置是了解MyBatis的基础知识的关键。 3.1 MyBatis核心对象 MyBatis的核心...

    mybatis基本配置及例子.zip_mybatis_mybatis sql server_mybatis 实例_mybati

    这些例子可以帮助学习者快速理解并掌握MyBatis的使用方法。 通过深入学习和实践这些知识点,开发者能够熟练地运用MyBatis进行数据库操作,提升开发效率,减少出错概率。对于SQL Server数据库的使用者,结合MyBatis...

Global site tag (gtag.js) - Google Analytics