使用mybatis连接数据库并查询
2020-07-13 05:03
411 查看
图书管理类项目
目的:展示所有图书(条件:图书名 借书人名 -->模糊查询)
(一)数据库表结构分析和建表语句所用到的sql语句
表结构
图书表:bookId bookName price store des bookType 借出表:borrowId uid bookId borrowDate 归还表:backId borrowId backDate delayMoney 购买记录表:bookId buyID buyDate buyNum totalPrice 用户表:userId userName grade phone userType 图书类型表:typeId typeName defaultDate delayMoneyPerDay
建表语句
#图书表 CREATE TABLE IF NOT EXISTS books( bookId INT(11) PRIMARY KEY AUTO_INCREMENT, bookName VARCHAR(10), price DOUBLE(11,2), store INT(11), des VARCHAR(200), bookType VARCHAR(20) ); INSERT INTO books (bookName, price, store, des, bookType) VALUES ( '我从全世界路过', 25, 100, '张嘉佳著', 'a'); INSERT INTO books (bookName, price, store, des, bookType) VALUES ('西游记', 15, 200, '吴承恩著', 'b'); #借出表 CREATE TABLE borrow( borrowId INT(11)PRIMARY KEY AUTO_INCREMENT, bookId INT(11), borrowDate DATE , uid INT(11) ); #归还表 CREATE TABLE back( backId INT(11)PRIMARY KEY AUTO_INCREMENT, borrowId INT(11), backDate DATE, delayMoney DOUBLE(11,2) ); #购买记录表 CREATE TABLE `library`.`buyRecord`( buyId INT(11) PRIMARY KEY AUTO_INCREMENT, bookid INT(11), buyDate DATE, buyNu INT(11), totalPrice DOUBLE(11,2) ); #用户表 CREATE TABLE users( userId INT(11) PRIMARY KEY AUTO_INCREMENT, userName VARCHAR(20), grade VARCHAR(20), phone VARCHAR(11), userType INT(11), ); INSERT INTO users (userName, grade, phone, userType) VALUES ('admin', 'xx', 'xx', 0); INSERT INTO users (userName, grade, phone, userType) VALUES ('小明', '大一', '15155689754', 1); #图书类型表 CREATE TABLE booksType( typeId INT(11) PRIMARY KEY AUTO_INCREMENT, typeName VARCHAR(20), defaultDate INT(11), delayMoneyPerDay DOUBLE(11,2), ); INSERT INTO booksType (typeName, defaultDate, delayMoneyPerDay) VALUES ( 'a', 5, 1); INSERT INTO booksType (typeName, defaultDate, delayMoneyPerDay) VALUES ( 'b', 3, 0.5); #登录sql语句 SELECT * FROM users u WHERE u.userName='admin'; #图书名模糊查询语句 SELECT * FROM books b WHERE b.bookName LIKE CONCAT('%','我','%'); #根据借书人名查书名 SELECT * FROM books b WHERE b.bookId IN ( SELECT br.bookId FROM borrow br WHERE br.uid IN (SELECT u.userId FROM users u WHERE u.userName like concat('%',#{userName},'%')) );
(二)使用mybatis连接数据库,查询
1)导入相关jar包(连接数据库 mybatis junit等)
2)将mysql数据库中的每个表建立对应的实体类(要求字段名和数据库中相同)
例子:
package exam.pojo; /** * @author sunyong * @date 2020/06/15 * @description * 图书类 */ public class Books { private int bookId;//书编号 private String bookName;//书名 private double price;//售出单价 private int store;//库存量 private String des;//描述 private String bookType;//图书类型 public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getStore() { return store; } public void setStore(int store) { this.store = store; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } public String getBookType() { return bookType; } public void setBookType(String bookType) { this.bookType = bookType; } //重写tostring方便打印 @Override public String toString() { return "Books{" + "bookId=" + bookId + ", bookName='" + bookName + '\'' + ", price=" + price + ", store=" + store + ", des='" + des + '\'' + ", bookType='" + bookType + '\'' + '}'; } }
3)编写相关配置文件
日志文件
### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = F://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 输出ERROR 级别以上的日志到=E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =E://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
数据库配置文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://192.168.56.101:3306/library?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull username=kb07 password=ok
编写mybatis的配置文件(编写接口对应的xml文件将该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 resource="database.properties"> </properties> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="dev"> <environment id="dev"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="exam/dao/UserDao.xml"/> <mapper resource="exam/dao/BooksDao.xml"/> </mappers> </configuration>
4)新建dao层包,在该包下建一个图书表的dao接口和对应的映射文件–>需要注意的是映射文件中的命名空间为该类的全类名,每个子语句的id为方法名需要一一对应,然后在mybatis文件中引入该映射文件
接口:
package exam.dao; import exam.pojo.Books; import org.apache.ibatis.annotations.Param; import java.util.List; public interface BooksDao { List<Books> getBookByName(@Param("name") String name); List<Books> getBookByBorrowName(@Param("userName") String userName); }
映射文件:
<?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="exam.dao.BooksDao"> <select id="getBookByName" parameterType="STRING" resultType="exam.pojo.Books"> select * from books b where b.bookName like concat('%',#{name},'%'); </select> <select id="getBookByBorrowName" parameterType="string" resultType="exam.pojo.Books"> select * from books b where b.bookId in ( select br.bookId from borrow br where br.uid in (select u.userId from users u where u.userName like concat('%',#{userName},'%')) ); </select> </mapper>
5)编写一个工具类与数据库之间建立会话
package exam.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; /** * @author sunyong * @date 2020/06/09 * @description */ public class MapperConfig { private static SqlSessionFactory factory ; //静态代码块只加载一次 static { SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); InputStream is = null; try { is= Resources.getResourceAsStream("mybatis-config.xml"); factory=builder.build(is); } catch (IOException e) { e.printStackTrace(); }finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } //私有构造 private MapperConfig(){} //得到SqlSession public static SqlSession getSession(){ return factory.openSession(true); } }
6)建立图书表的测试类测试程序
package exam.dao; import exam.pojo.Books; import exam.pojo.Users; import exam.utils.MapperConfig; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; import static org.junit.Assert.*; public class BooksDaoTest { //测试书名模糊查询 @Test public void test(){ SqlSession session = MapperConfig.getSession(); List<Books> booksList = session.getMapper(BooksDao.class).getBookByName("我"); System.out.println(booksList); } //测试借书人名模糊查询 @Test public void test1(){ SqlSession session = MapperConfig.getSession(); List<Books> booksList = session.getMapper(BooksDao.class).getBookByBorrowName("小"); System.out.println(booksList); } }
7)测试结果
相关文章推荐
- 查询使用某个用户连接到数据库的所有客户端
- 在使用mybatis时遇到查询结果返回为空的情况,但是查数据库能查到
- 使用PDO连接数据库 查询和插入乱码的解决方法
- java连接数据库方式(二):单独使用MyBatis 框架实现
- [SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑
- docker(7):使用python 连接数据库,插入并查询数据--link
- 在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker ”
- 利用javabean轻松实现对数据库的连接、查询以及增删改!------使用范例
- 使用JDBC连接数据库,查询结果转成List或者Map(简洁版)
- spring mybatis不能使用变量连接数据库
- java JDBC 连接数据库查询数据与直接使用sql的疑问
- 在 Spring Boot @Configuration 注解类中使用 Mybatis 查询数据库启动报错
- 使用mybatis时 有一个sql查询不到结果 日志也显示查询为o 但是从日志中取出执行的sql到数据库客户端手动执行,可以查到数据
- 【个人学习】使用idea搭建SpringBoot,整合Mybatis、Thymeleaf,连接数据库,实现具有前端界面项目:主要功能登录,注册,个人信息查看、更改,不定时更新中...
- 使用MyBatis连接数据库,并完成各种数据操作
- 使用Mybatis时请注意这两个参数,否则会让你的数据库连接爆掉
- 使用JDBC连接数据库,查询结果转成List或者Map(臃肿版)
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成