概述
在学习Mybatis时我们应该先知道为什么要学习mybatis,mybatis有什么,mybatis能做什么?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
在此可以引出一个问题什么是半自动化的ORM呢?
- ORM(对象关系映射):利用对象和数据库之间映射的数据,把Java程序中的对象持久化到数据库中的表内。
- 这里的“半自动化”,是相对 Hibernate 等提供了全面的数据库封装机制的“全自动化”ORM 实现而言,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。而 MyBatis 的着力点,则在于 POJO 与 SQL 之间的映射关系。也就是说,MyBatis 并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。使用 ibatis 提供的 ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的 Java 对象,这一层与通过 Hibernate 实现 ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成 SQL 语句,而 MyBatis 则要求开发者编写具体的 SQL 语句。相对 Hibernate 等“全自动”ORM 机制而言,ibatis 以 SQL 开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,MyBatis 的出现显得别具意义。
- ------------------------以上文字部分来自其他路径 https://www.w3cschool.cn/mybatis 有需要可自行查询--------------------------------
- 我们可以再说一下mybatis的优缺点:
- 优点:1.简单易学
- 2.消除了大量的JDBC过多的代码
- 3.良好的性能
- 3.友好的Spring集成支持
- 4.友好的第三方缓存类库集成支持
- 缺点:1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
- 2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
- 3、缓存机制不佳
-------mybatis连接数据库进行操作数据-------
一、导入jar包
以下是项目的结构
如果使用myeclipse等工具注意jar包放在lib文件里
要下载的jar包(官方):
mysql驱动 jar包:https://dev.mysql.com/downloads/connector/j/
junit测试 jar包:https://junit.org/junit4/
mybatis jar包:https://github.com/mybatis
log4j日志文件 jar包:http://logging.apache.org/log4j/2.x/download.html
<dependencies>
<dependency>
<!--日志文件所用的jar包-->
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<!--mysql驱动包-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>
<dependency>
<!--mybatisjar包-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<!--测试所用的jar包-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
log4j所用代码可以从官网找到
log4j.rootLogger=DEBUG,CONSOLE,file
log4j.logger.cn.smbms.dao=debug
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
log4j.logger.com.opensymphony.xwork2=error
创建database.properties文件
二、
以下是我项目的结构
如果使用myeclipse等工具注意jar包放在lib文件里
对应数据表创建一个pojo实体对象
public class Tuser {
private Integer id;
private String userName,password,nickName;
@Override
public String toString() {
return "Tuser{" +
"id=" + id +
", userName='" + userName + ''' +
", password='" + password + ''' +
", nickName='" + nickName + ''' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
}
三、创建mybatis的配置文件mybatis-config.xml
<configuration>
<!--调用database.properties文件-->
<properties resource="database.properties"></properties>
<!--选择log4j日志存储文件-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--类型别名-->
<typeAliases>
<typeAlias alias="Tuser" type="cn.jdbc.entity.Tuser"></typeAlias>
</typeAliases>
<environments default="dvr">
<environment id="dvr">
<!--事务管理器 选择jdbc获取事务-->
<transactionManager type="JDBC"></transactionManager>
<!--数据源有POOLED 和UNPOLED可选择是否使用数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<!--mappers是映射器,把mapper文件加入到配置文件中-->
<mapper resource="cn/jdbc/dao/TuserMapper.xml"></mapper>
</mappers>
</configuration>
四、创建上面的TuserMapper.xml(Sql映射wenj)
<mapper namespace="cn.jdbc.dao.TuserMapper">
<!--避免因为数据库与程序中变量出现不同名,会出现差误。所以使用resultMap-->
<resultMap id="userMap" type="Tuser">
<id property="id" column="id"></id>
<result property="userName" column="user_name"></result>
<result property="password" column="password"></result>
<result property="nickName" column="nick_name"></result>
</resultMap>
测试类
@Test
public void QueryCount() {
String source="mybatis-config.xml";
int count=0;
SqlSession sqlSession=null;
try {
//1 获取mybatis-config.xml的输入流
InputStream is = Resources.getResourceAsStream(source);
//2 创建一个工厂,完成对配置文件的读取
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
//3 创建sqlSession,开启工厂
sqlSession=sqlSessionFactory.openSession();
//4 根据放入工厂的sql语句执行不同的方法
count=sqlSession.selectOne("com.bdqn.dao.TUserMapper.queryCount");
System.out.println(count);
} catch (IOException e) { e.printStackTrace(); }finally { sqlSession.close(); } }}
@Test
public void queryALLTest(){
SqlSession sqlSession=null;
try {
//1 获取mybatis-config.xml的输入流
InputStream is = Resources.getResourceAsStream(source);
//2 创建一个工厂,完成对配置文件的读取
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
//3 创建sqlSession,开启工厂
sqlSession=sqlSessionFactory.openSession();
//4 根据放入工厂的sql语句执行不同的方法
以上测试类的方法有很多的冗余代码,我们可以抽取冗余的代码建一个工具类:
注意: 导的包要注意package cn.jdbc.util;
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;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession createSqlSession(){
return sqlSessionFactory.openSession();
}
public static void closeSqlSession(SqlSession sqlSession){
if(sqlSession!=null){
sqlSession.close();
}
}
}
首先创建一个TuserMapper接口,注意要和TuserMapper.xml同名
public interface TuserMapper {
//查询全部用户信息
List<Name> queryAll();
//模糊查询,查询通过用户名查询用户信息
List<Name> getUserListByUserName(String name);
//修改数据
public Integer updateTuser(Name name);
//删除用户数据
Integer deleteTuserByid(Integer id);
//插入数据
Integer addTuser(Name name);
}
测试类
//获取全部用户信息
public void queryAll(){
SqlSession sqlSession=null;
sqlSession=MybatisUtil.createSqlSession();
//第一种方法 通过全限定名获取信息
// List<Tuser> n=sqlSession.selectList("cn.jdbc.dao.TuserTest.queryAll");
//第二种方法 通过接口返回信息引入映射文件中
List<Name> n=sqlSession.getMapper(TuserMapper.class).queryAll();
if(n!=null){
for (Name tuser : n) {
System.out.println(tuser);
}
}
}
//添加
public void addTuser(){
SqlSession sqlSession=null;
Tuser user=new Tuser();
user.setUserName("admin");
user.setPassword("121212");
user.setNickName("mingming");
int rows=0;
sqlSession = MybatisUtil.createSqlSession();
rows=sqlSession.getMapper(TuserMapper.class).addTuser(name);
sqlSession.commit();
if(rows>0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
MybatisUtil.closeSqlSession(sqlSession);
}
//修改
public void testUpdateTuser(){
SqlSession sqlSession=null;
Tuser user=new Tuser();
user.setUserName("admin33");
user.setPassword("00000");
user.setId(002);
user.setNickName("ming");
//删除
public void testDeletTuserByid(){
SqlSession sqlSession=null;
int delete=0;
sqlSession = MybatisUtil.createSqlSession();
delete=sqlSession.getMapper(TuserMapper.class).deleteTuserByid(1);
sqlSession.commit();
if(delete>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
MybatisUtil.closeSqlSession(sqlSession);
}
此文是笔者初学乍练,准备不足之作,如有错误,欢迎向笔者提出,以避免笔者误导其他读者。
最后
以上就是直率手套为你收集整理的MyBatis如何连接数据库 -------mybatis连接数据库进行操作数据-------一、导入jar包二、对应数据表创建一个pojo实体对象三、创建mybatis的配置文件mybatis-config.xml四、创建上面的TuserMapper.xml(Sql映射wenj) 测试类的全部内容,希望文章能够帮你解决MyBatis如何连接数据库 -------mybatis连接数据库进行操作数据-------一、导入jar包二、对应数据表创建一个pojo实体对象三、创建mybatis的配置文件mybatis-config.xml四、创建上面的TuserMapper.xml(Sql映射wenj) 测试类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复