java框架之使用maven搭建Mybatis

我搭建的Mybatis的框架的分层:

代码:实体层、业务对象层、映射对象层、工具层、测试层

配置文件:数据库配置文件、mapper映射配置文件、log日志配置文件

mybatis的配置的校验头

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

 mybatis的mapper的校验头

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

日志文件 log4j.properties

log4j.rootLogger=DEBUG, stdout  
  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
log4j.logger.java.sql.Statement = debug  
log4j.logger.java.sql.PreparedStatement = debug  
log4j.logger.java.sql.ResultSet =debug   


1.多表查询和单表插入的实例

创建用户实体类

package com.mybatis.domain;

public class UserInfo {
private int userId;
private String userName;
private String userSex;
public int getUserId() {
	return userId;
}
public void setUserId(int userId) {
	this.userId = userId;
}
public String getUserName() {
	return userName;
}
public void setUserName(String userName) {
	this.userName = userName;
}
public String getUserSex() {
	return userSex;
}
public void setUserSex(String userSex) {
	this.userSex = userSex;
}


}

创建书籍和用户关联的业务类

package com.mybatis.BO;
/**
 * Business Object
 * 业务逻辑层
 */
import java.math.BigDecimal;
import java.sql.Date;

public class BookDetailBO {
private BigDecimal bookId;
private String bookName;
private  BigDecimal bookPrice;
private Date bookDate;
private String userName;


public String getUserName() {
	return userName;
}
public void setUserName(String userName) {
	this.userName = userName;
}

public BigDecimal getBookId() {
	return bookId;
}
public void setBookId(BigDecimal bookId) {
	this.bookId = bookId;
}
public String getBookName() {
	return bookName;
}
public void setBookName(String bookName) {
	this.bookName = bookName;
}
public BigDecimal getBookPrice() {
	return bookPrice;
}
public void setBookPrice(BigDecimal bookPrice) {
	this.bookPrice = bookPrice;
}
public Date getBookDate() {
	return bookDate;
}
public void setBookDate(Date bookDate) {
	this.bookDate = bookDate;
}
@Override
public String toString() {
	return "BookDetailBO [bookId=" + bookId + ", bookName=" + bookName + ", bookPrice=" + bookPrice + ", bookDate="
			+ bookDate + ", userName=" + userName + "]";
}

}

在resources文件夹中创建数据库配置文件DateSource.properties

#数据库配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=123

创建mapper类

package com.mybatis.mapper;


import org.apache.ibatis.annotations.Param;

import com.mybatis.BO.BookDetailBO;
import com.mybatis.domain.UserInfo;

public interface BookInfoMapper {
	BookDetailBO getid(@Param("bookId")Integer bookId,@Param("userName")String userName);
	//已将它单独拆除来,作为userInfoMapper的方法
	//int insertuser(UserInfo userInfo);
}
package com.mybatis.mapper;


import com.mybatis.domain.UserInfo;

public interface UserInfoMapper {
	int insertuser(UserInfo userInfo);
}

创建bookInfoMapper的配置文件

<?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接口-->
<mapper namespace="com.mybatis.mapper.BookInfoMapper">
<resultMap id="BookDetailMapper" type="com.mybatis.BO.BookDetailBO">
<id property="bookId" column="book_id"/>
<result property="bookName" column="book_name"/>
<result property="bookPrice" column="book_price"/>
<result property="bookDate" column="book_date"/>
<result property="userName" column="user_name"/>
</resultMap>
<!-- 多表查询 : id="getid" 为借口中的名称,或者是普通方法调用的标识-->
<select id="getid" resultMap="BookDetailMapper">
  SELECT 
  b.book_date,
  b.book_name,
  b.book_price,
  u.user_name
 FROM t_book b 
 INNER JOIN t_user u ON u.user_id=b.user_id 
 WHERE b.book_id=#{bookId,jdbcType=BIGINT} 
 <if test="userName !='' and userName !=null">
  and u.user_name=#{userName,jdbcType=VARCHAR}
 </if>
</select>
<!--当解开这个时,因为userInfoMapper也有这个方法,id会冲突,可以换一个id或者,调用时id换成全路径名称-->
<!-- <insert id="insertuser" parameterType="com.mybatis.domain.UserInfo">
INSERT t_user (user_id,user_name,user_sex) VALUES(#{userId},#{userName},#{userSex})
</insert> -->
</mapper>

创建userInfoMapper的配置文件

<?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.mybatis.mapper.UserInfoMapper">
<insert id="insertuser" parameterType="com.mybatis.domain.UserInfo">
INSERT t_user (user_id,user_name,user_sex) VALUES(#{userId},#{userName},#{userSex})
</insert>
</mapper>

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>
<!-- 把配置文件加载到mybatis中 -->
<properties resource="DateSource.properties"></properties>
<environments default="mysql">
<environment id="mysql">
<!-- JDBC 把事务管理直接使用数据库来控制
     MANAGED 把事物交由用第三方事物管理(如整合spring时使用spring容器管理)
 -->
<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>
<mappers>
<!-- 引入mapper文件-->
<mapper resource="mybatis/mapper/bookDetailBOMapper.xml"/>
<mapper resource="mybatis/mapper/userInfoMapper.xml"/>
</mappers>
</configuration>

工具类,返回sessionFactory

package com.mybatis.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 获取SqlSession的工具类
 * @author zy
 *
 */
public class SQLSession {
	private static SqlSessionFactory sessionFactory;
		static{
			try {
				//mybatis封装的资源读取类,底层还是通过classLoader获取流
				Reader reader=Resources.getResourceAsReader("SqlMapperConfig.xml");
				sessionFactory=new SqlSessionFactoryBuilder().build(reader);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	public static SqlSession getSession(){
		return sessionFactory.openSession();
	}
}

测试类

package com.mybatis.test;

import org.apache.ibatis.session.SqlSession;

import com.mybatis.BO.BookDetailBO;
import com.mybatis.domain.UserInfo;
import com.mybatis.mapper.BookInfoMapper;
import com.mybatis.util.SQLSession;

public class Test {
		public static void main(String[] args) {
			SqlSession session=SQLSession.getSession();
			/**
			 * 使用mapper操作
			 */
			BookInfoMapper bookInfoMapper = session.getMapper(BookInfoMapper.class);
			BookDetailBO bookDetailBO = bookInfoMapper.getid(3, "");
			System.out.println(bookDetailBO);
			//会影响数据库行数的则需要commit,只有提交了才会持久化到数据库
			UserInfo userInfo=new UserInfo();
			userInfo.setUserId(7);
			userInfo.setUserName("test");
			userInfo.setUserSex("男");
			//userInfoMapper也可以使用,自己可以试一试
		/*	int row=bookInfoMapper.insertuser(userInfo);
			System.out.println(row>0 ? "添加成功" :"添加失败");*/
			/**
			 * 通用操作
			 * insertuser为mapper配置文件中的id
			 */
			userInfo.setUserId(9);
			int row=session.insert("insertuser", userInfo);
			session.commit();
			System.out.println(row>0 ? "添加成功" :"添加失败");
		}
}

运行结果: 

[service] 2018-11-14 15:13:40,433 - org.apache.ibatis.logging.LogFactory -0    [main] DEBUG org.apache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
   [service] 2018-11-14 15:13:40,558 - org.apache.ibatis.datasource.pooled.PooledDataSource -125  [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
   [service] 2018-11-14 15:13:40,558 - org.apache.ibatis.datasource.pooled.PooledDataSource -125  [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
   [service] 2018-11-14 15:13:40,558 - org.apache.ibatis.datasource.pooled.PooledDataSource -125  [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
   [service] 2018-11-14 15:13:40,558 - org.apache.ibatis.datasource.pooled.PooledDataSource -125  [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
   [service] 2018-11-14 15:13:40,793 - org.apache.ibatis.transaction.jdbc.JdbcTransaction -360  [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction  - Opening JDBC Connection
   [service] 2018-11-14 15:13:41,074 - org.apache.ibatis.datasource.pooled.PooledDataSource -641  [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource  - Created connection 660143728.
   [service] 2018-11-14 15:13:41,074 - org.apache.ibatis.transaction.jdbc.JdbcTransaction -641  [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2758fe70]
   [service] 2018-11-14 15:13:41,087 - com.mybatis.mapper.BookInfoMapper.getid -654  [main] DEBUG com.mybatis.mapper.BookInfoMapper.getid  - ==>  Preparing: SELECT b.book_date, b.book_name, b.book_price, u.user_name FROM t_book b INNER JOIN t_user u ON u.user_id=b.user_id WHERE b.book_id=? 
   [service] 2018-11-14 15:13:41,102 - com.mybatis.mapper.BookInfoMapper.getid -669  [main] DEBUG com.mybatis.mapper.BookInfoMapper.getid  - ==> Parameters: 3(Integer)
   [service] 2018-11-14 15:13:41,118 - com.mybatis.mapper.BookInfoMapper.getid -685  [main] DEBUG com.mybatis.mapper.BookInfoMapper.getid  - <==      Total: 1
   BookDetailBO [bookId=null, bookName=三生花, bookPrice=12, bookDate=2018-10-23, userName=古月]
[service] 2018-11-14 15:13:41,118 - com.mybatis.mapper.UserInfoMapper.insertuser -685  [main] DEBUG com.mybatis.mapper.UserInfoMapper.insertuser  - ==>  Preparing: INSERT t_user (user_id,user_name,user_sex) VALUES(?,?,?) 
   [service] 2018-11-14 15:13:41,118 - com.mybatis.mapper.UserInfoMapper.insertuser -685  [main] DEBUG com.mybatis.mapper.UserInfoMapper.insertuser  - ==> Parameters: 9(Integer), test(String), 男(String)
   [service] 2018-11-14 15:13:41,134 - com.mybatis.mapper.UserInfoMapper.insertuser -701  [main] DEBUG com.mybatis.mapper.UserInfoMapper.insertuser  - <==    Updates: 1
   [service] 2018-11-14 15:13:41,134 - org.apache.ibatis.transaction.jdbc.JdbcTransaction -701  [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction  - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2758fe70]
   添加成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值