使用Mybatis框架进行开发步骤

mybatis也是一个开源的框架,是对JDBC的一种封装,运行效率相对于hibernate高,学习成本低,只要学号SQL语句,就可以。

1.导入jar包


这里的jar包,不只是mybatis的还有连接池和MySQL和Oracle的需要用的jar包

2.在src目录下创建一个mybatis-config.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 resource="jdbc.properties"></properties>
	
	<!-- 定义一些别名 -->
	<typeAliases>
		<typeAlias type="sdibt.group.entity.Book" alias="book"/>
	</typeAliases>
	<!-- 声明数据连接环境 -->
	<environments default="development">
	
		<!-- JDBC数据源 -->
		<environment id="development">
			<!-- 事物 -->
			<transactionManager type="JDBC" />
			<!-- 数据源 -->
			<dataSource type="POOLED">
				<property name="driver" value="${mysql.driverClass}" />
				<property name="url" value="${mysql.jdbcUrl}" />
				<property name="username" value="${mysql.user}" />
				<property name="password" value="${mysql.password}" />
			</dataSource>
		</environment>

	</environments>
	<mappers>
		<!-- 映射文件<mapper resource="cn/cache/cache.xml"/> -->
		<mapper resource="sdibt/group/entity/Book.xml" />
	</mappers>
</configuration>

3.在src目录下创建一个jdbc.properties的连接数据库的配置文件,这样做的目的是以后切换数据库的时候不用修改配置文件,直接在这个目录下修改就可以。

#MySQL  DataSource
mysql.driverClass=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8
mysql.user=root
mysql.password=root


#Oracle   DataSource
oracle.driverClass=oracle.jdbc.driver.OracleDriver
oracle.jdbcUrl=jdbc:oracle:thin:@localhost:1521/orcl
oracle.user=sdibt
oracle.password=ok

4.还需要一个配置文件,因为mybatis是需要自己创建表的,实体类可以不要(但是一般会创建一个)。在和实体类相同的目录下创建一个和实体类名称相同的xml的配置文件。

如果是是查询就在<select>标签下面写SQL,插入就是insert标签,更新就是update,删除就是delete标签

里面的属性 id 就是程序运行的时候根据这个id找到对应的SQL,resultType是返回值的类型,(因为查询出来的结果有很多,是一个list集合,这里的类型就是list集合里的泛型类型)。parameterType是传递的参数类型,因为可能有条件查询,还会有插入需要参数。

<?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必须定义,非绑定到类或是接口的方式 -->
<mapper namespace="sdibt.group.entity.Book">

        <!-- 别名的方式 -->
	<!-- resultType可以直接写完整的包名(sdibt.group.entity.Book),也可以随便写,但是在总的配置文件中必须设置这个名对应的是那个类 -->
  	<select id="all" resultType="book">
    	select id as id,book_name as bookName,book_price as bookPrice,book_page as bookPage from book
  	</select>

        <!-- 指定类型 -->
	<!-- 返回值就是真正的类型Book -->
	<resultMap type="sdibt.group.entity.Book" id="allBook">
		<id column="id" property="id" javaType="java.lang.Integer" />
		<result column="book_name" property="bookName" javaType="java.lang.String" />
		<result column="book_price" property="bookPrice" javaType="java.lang.Double" />
		<result column="book_page" property="bookPage" javaType="java.lang.Integer" />
	</resultMap>
	<!-- id是调用查询的时候用作查找的,resultMap是和上面的resultMap标签的id标签相对应 -->
  	<select id="allMap" resultMap="allBook">
    	<!-- select id as id,book_name as bookName,book_price as bookPrice,book_page as bookPage from book -->
    	select * from book  
  	</select>
  	
  	<!-- 返回值设置为Map -->
  	<select id="allBookMap" resultType="java.util.Map">
    	select * from book  
  	</select>
  	
  	<!-- 根据id查找相应的书籍 -->
  	<select id="findById" resultMap="allBook" parameterType="int">
  		select * from book where id=#{idd}
  	</select>  
</mapper>

这里有三种方式,第一种使用别名。

因为从数据库查询到东西之后返回过来的数据可能无法转换成实体类,因为实体类的属性名和数据库对应的表的列名可能不一样,所以不仅要告诉mybatis返回的类型是什么,写SQL的时候不能用*,要给列起别名,就会自动转换为对应的实体类。不过这种方式显然有些繁琐。所以可以用第二种和第三种。

第二种是指定类型,

就是在实体类对应的配置文件中配置一下,数据库的列和实体类的属性名对应起来,还要告诉mybatis对应的java类型是什么类型。(这里要写完整的包名,不能只写int,double之类的),这种方式的select标签上就是resultMap而不是resultType了,在这个标签上面配置resultMap标签,里面配置将数据库的列和实体类属性相对应起来。

第三种一般在什么情况下都可以使用,因为如果查询的表不一样,返回的类型就不一样,如果用第三种Map的形式,就睡适应所有的情况。在数据库查询出来的是一个集合,因为数据库不可能只有一条记录,然后在java中使用的时候,每次只能使用一条记录,例如打印到控制台,或者修改数据的时候,只能一条记录一条记录的修改。每一条记录,都是列名加上数据的集合,所以很像java里的map集合。


配置方式,见上面我写的。

这样方式尤其适用于,返回部分列的时候,这个时候就不能转换为对应的实体类,就可以使用这种方式。

得到数据方式如下。(到数据库执行SQL,下面会写。)

	public void testReturnMap() {
		//查询数据库
		List<Map> books = session.selectList("sdibt.group.entity.Book.allBookMap");
		for (Map book : books) {
			System.out.println(book.get("book_name"));
		}
		
	}

5.测试查询数据库

	// 1.加载配置文件
	InputStream in = TestMybatis1.class.getResourceAsStream("/mybatis-config.xml");
	//创建sessionFactory
	SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);
	//得到一个session
	SqlSession session = sf.openSession();
        //查询数据库
	List<Book> books = session.selectList("sdibt.group.entity.Book.allMap");
	for (Book book : books) {
		System.out.println(book.getBookPrice());
	}
	//关闭资源
	if (session!=null) {
		session.close();
	}

然后运行就可以了。

session.selectList("sdibt.group.entity.Book.allMap")

这个是执行SQL语句sdibt.group.entity.Book.这个是命名空间,如果只写id,不同的实体类对应的配置文件可能有相同的id。所以要写,后面的就是SQL对应的id了。

写的不好的地方欢迎批评。

猜你喜欢

转载自blog.csdn.net/Quan_qqqq/article/details/80611505
今日推荐