MyBatis学习之环境搭建
来源:互联网 发布:阿里云服务器代理商 编辑:程序博客网 时间:2024/06/05 09:28
MyBatis的简单介绍
- Hibernate:
面向对象的对象关系映射的Java持久层框架
缺点:效率较低,不是直接用SQL进行操作数据库,没有进行SQL优化,因此对于一些大型的项目来说效率较低
2.MyBatis:
一个面向SQL的Java持久层框架,也称之为SQL映射
体系结构主要分为三层:接口层,数据处理层,基础支撑层
我们主要使用接口层和数据库进行交互,由于它是需要我们自己定义SQL语句,因此我们可以根据我们自己的需要来书写适合我们的业务的SQL语句,可以进行适当的优化,所以效率方面可能比Hibernate高一些
MyBatis环境
要使用一个框架就免不了搭建环境,配置一些必要的文件,因此要想使用一个框架就首先就得学会搭建环境。
1. 引入MyBatis相关的jar包,如果是基于Maven的项目,那么就可以直接在pom.xml文件添加依赖即可。下面是Maven项目关于MyBatis的一些依赖:
<mybatis.version>3.2.8</mybatis.version><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version></dependency>
还有一个就是因为要连接数据库就还得引入相关数据库的驱动包,以下是MySql的Maven依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version></dependency>
- 配置一些必要的xml文件,由于MyBatis框架是作用于持久层的,主要是用来操作数据库,因此配置文件主要配置数据源,也就是数据库的连接配置,然后就是配置开发中需要的Mapping映射文件,以下就是相关配置内容,里面有各个标签的详细注释。
<?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="db-config.properties"></properties> <!-- 为实体类起一个别名 --> <typeAliases> <typeAlias alias="User" type="com.ecjtu.mybatis.entity.User"/> <typeAlias alias="Article" type="com.ecjtu.mybatis.entity.Article"/> </typeAliases> <environments default="development"> <!-- 环境配置 --> <environment id="development"> <!-- 事物管理器,事物处理采用jdbc的处理方式 --> <transactionManager type="JDBC"/> <!-- 数据源 UNPOOLED表示不使用连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 实体类Mapping映射文件 --> <mappers> <mapper resource="com/ecjtu/mybatis/entity/mybatis-user-sql.xml"/> </mappers></configuration>
3.配置好了之后就可以对数据库进行操作了,也就是增删改查操作,首先通过Resource拿到MyBatis的配置文件作为一个字符流,再通过字符流创建一个sqlSessionFactory,拿到sqlSessionFactory之后就好办了,这时就可以调用openSession方法得到session,之后就可以通过session来对数据库进行增删改查操作,常见的查询方法有:
查询返回单一数据:selectOne(sqlId,args)
查询返回一个list集合:selectList(sqlId,args);
查询返回一个map集合:selectMap(sqlId,mapKey)
注意:返回Map集合时,是将实体类中指定的字段作为key,查询结果作为val,形成键值对,组合成map集合返回。
以下是操作数据库的简单应用:
String resource = "mybatis-config.xml"; //引入mybatis的配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); //創建mybatis的sqlsessionfactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //用sqlsessionfactory創建一個session SqlSession session = sqlSessionFactory.openSession(); List<User> users = session.selectList("queryUsers", "zhangsan"); System.out.println(users.size() + "==============="); Map<String, User> userMap = session.selectMap("queryUsers", "userName"); System.out.println(userMap);
4.关于实体类的Xml文件,其中的namespace是为了区分不同实体类xml文件中下面的相同sqlId的情况,访问方式就是命名空间.sqlId,但如果能够保证命名空间中的sqlId都不同,那么命名空间可以不用写,但struts2中必须要写,而且注意:struts2中的对于一个URI,是首先找到所有和uri相同的命名空间前缀,然后找最长匹配的那个命名空间。
<?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.ecjtu.mybatis.inter.IUserOperation"> <!-- ID的內容和接口裡面的方法名要一致, resultType的值要和configuration裡面的typeAlias alias="User"一樣 --> <select id="selectUserByID" parameterType="int" resultType="User"> select * from user where id = #{id} </select> <!-- 为了返回list 类型而定义的resultMap --> <resultMap type="User" id="resultListUser"> <id column="id" property="id" /> <result column="userName" property="userName" /> <result column="userAge" property="userAge" /> <result column="userAddress" property="userAddress" /> </resultMap> <!-- User 联合文章进行查询 方法之一的配置 (多对一的方式) --> <resultMap id="resultUserArticleList" type="com.ecjtu.mybatis.entity.Article"> <!-- 这里column对应于查询出来的列名一致 --> <id property="id" column="aid" /> <result property="title" column="title" /> <result property="content" column="content" /> <association property="user" javaType="User"> <id property="id" column="id" /> <result property="userName" column="userName" /> <result property="userAddress" column="userAddress" /> </association> </resultMap> <!-- User 联合文章进行查询 方法之二的配置 (多对一的方式) --> <resultMap id="resultUserArticleList-2" type="com.ecjtu.mybatis.entity.Article"> <id property="id" column="aid" /> <result property="title" column="title" /> <result property="content" column="content" /> <association property="user" javaType="User" resultMap="resultListUser" /> </resultMap> <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> <select id="selectUsers" parameterType="string" resultMap="resultListUser"> select * from user where userName like #{userName} </select> <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> <select id="queryUsers" parameterType="string" resultMap="resultListUser"> select * from user </select> <!-- 主键使用自增长 --> <insert id="addUser" parameterType="com.ecjtu.mybatis.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into user values(#{id},#{userName},#{userAge},#{userAddress}) </insert> <update id="updateUser" parameterType="User"> update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete> <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList-2"> select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id} </select></mapper>
5.对于MyBatis中的namespace可以用于将命名空间和接口进行绑定,然后将方法和映射文件中的SQLId进行绑定,当调用接口中的方法时,等同于调用命名空间中的sqlId对应的SQL文,格式:
daoInter = session.getMapper(接口名.class);
获取到实例后就可以调用方法了。
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例--> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象--> <property name="mapperInterface" value="com.ecjtu.mybatis.inter.IUserOperation" /> </bean>
public interface IUserOperation { public User selectUserByID(int id); public List<User> selectUsers(String userName); public void addUser(User user); public void updateUser(User user); public void deleteUser(int id); public List<Article> getUserArticles(int id);}
6.还可以通过命名空间来打印sql执行的详细log,当然需要先引入相关jar包以及配置log4j配置文件,格式如下:
log4j.logger.命名空间的名称=TRACE
- MyBatis学习之环境搭建
- SpringMVC+mybatis学习一之环境搭建
- mybatis 之 环境搭建
- MyBatis学习之路(1)_环境搭建
- Mybatis学习之开发环境搭建(1)
- Mybatis学习(一)环境搭建之踩坑
- mybatis框架学习(一)之简单搭建环境
- Mybatis使用之环境搭建
- 装修之mybatis环境搭建
- mybatis入门学习,mybatis环境搭建
- mybatis学习之环境配置
- Mybatis学习笔记一(环境搭建)
- MyBatis学习:基础环境搭建与入门
- Mybatis学习(1)开发环境搭建
- Mybatis学习(1)开发环境搭建
- Mybatis学习(一)环境搭建
- Dojo学习之环境搭建
- django学习之环境搭建
- typedef 和#define 的区别
- 03 建立单独的KVM虚拟化
- 欢迎使用CSDN-markdown编辑器
- 思维晚操-12.19
- writeup--RedTiger's Hackit
- MyBatis学习之环境搭建
- MyEclipse下创建的项目 导入eclipse
- ios 约束(二)
- Linear Algebra - Lesson 27. 复数矩阵和快速傅里叶变换
- JavaEE Spring框架学习笔记(理论学习之通过@Bean注解)
- 如何查看socket options
- 欢迎使用CSDN-markdown编辑器
- 超漂亮的Bootstrap 富文本编辑器summernote
- [BZOJ1115][POI2009]石子游戏Kam(阶梯博弈)