基金网站建设,自动交换友情链接,做公司 网站建设价格,php建网站教程Mybatis环境搭建与使用 Mybatis介绍Mybatis环境搭建与使用基于XML方式-原生方式开发创建数据库表项目准备项目结构项目代码实体类中添加有参构造方法产生的问题 基于XML方式-mapper代理开发项目准备项目结构项目代码SQL映射文件中namespace未设置为接口全限定名产生的问题 基于… Mybatis环境搭建与使用 Mybatis介绍Mybatis环境搭建与使用基于XML方式-原生方式开发创建数据库表项目准备项目结构项目代码实体类中添加有参构造方法产生的问题 基于XML方式-mapper代理开发项目准备项目结构项目代码SQL映射文件中namespace未设置为接口全限定名产生的问题 基于注解方式项目准备项目结构项目代码 Mybatis介绍
Mybatis是一个用Java语言编写的持久层框架它使用ORM实现了对结果集的封装。 ORM(Object Relational Mapping)对象关系映射。简单来说就是把数据库表和实体类及实体类的属性对应起来让开发者操作实体类就能实现操作数据库表它封装了JDBC操作的很多细节使开发者只需要关注SQL语句本身而无需关注注册驱动、创建连接等复杂过程。
Mybatis中文网
Mybatis环境搭建与使用
Mybatis中有两种开发方式
基于注解方式基于XML方式
一般最常用的方式是基于XML的方式进行开发而基于XML方式开发也有两种方式
原生方式开发mapper代理开发
基于XML方式-原生方式开发
创建数据库表引入mybatis相关依赖配置数据源、mybatis等相关配置mybatis-config.xml定义Java对象对象的成员属性与数据库表中的字段名称对应定义mapper.xml文件存放需要执行的SQL语句每个表对应一个mapper调用mybatis框架中的api执行SQL语句并获取结果集
创建数据库表
CREATE DATABASE IF NOT EXISTS db_mybatis
DEFAULT CHARACTER SET utf8;USE db_mybatis;CREATE TABLE tb_user (id int NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,PRIMARY KEY (id)
);
INSERT INTO tb_user(name) VALUES(Bob);
INSERT INTO tb_user(name) VALUES(Tom);
INSERT INTO tb_user(name) VALUES(Jack);
INSERT INTO tb_user(name) VALUES(John);项目准备
项目结构 项目代码
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom/groupIdartifactIdmybatis/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.18/version/dependency/dependencies/projectmybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://127.0.0.1:3306/db_mybatis?serverTimezoneGMT%2B8/property nameusername valueroot/property namepassword valueadmin//dataSource/environment/environmentsmappersmapper resourcemappers/userMapper.xml//mappers
/configurationUserEntity.java
package com.mybatis.entity;/*** author honey* date 2023-07-26 15:29:38*/
public class UserEntity {private Integer id;private String name;Overridepublic String toString() {return UserEntity{ id id , name name \ };}
}userMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespaceuserMapperselect idlistUser resultTypecom.mybatis.entity.UserEntityselect * from tb_user/select
/mapperMybatisTest01.java
package com.mybatis.test;import com.mybatis.entity.UserEntity;
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;
import java.util.List;/*** author honey* date 2023-07-26 15:26:48*/
public class MybatisTest01 {public static void main(String[] args) throws IOException {// 1.读取加载mybatis-config.xml数据源、mybatis等配置InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);// 2.获取sqlSessionSqlSession sqlSession sqlSessionFactory.openSession();// 3.根据mappernamespaceuserMapper idlistUser执行sql语句并将查询到的数据映射成对象ormListUserEntity list sqlSession.selectList(userMapper.listUser, UserEntity.class);System.out.println(list);sqlSession.close();}
}实体类中添加有参构造方法产生的问题
下面这些情况是没有问题的
不添加构造方法默认走无参构造方法添加无参构造方法添加有参构造方法但是构造方法中的参数与查询结果集相匹配
第三种情况如下所示SQL语句查询的结果与构造方法中的参数能够成功映射 SQL语句 实体类 异常情况
SQL语句保持不变将实体类调整为下述情况则会报错 实体类保持不变将SQL语句调整为下述情况则会报错 解决方案在实体类中再额外添加一个无参构造方法。 基于XML方式-mapper代理开发
相较于原生方式开发mapper代理开发的优势不依赖于字符串的字面值减少了硬编码
定义与SQL映射文件同名的mapper接口设置SQL映射文件的namespace属性为mapper接口全限定名mapper接口中的方法需要与SQL映射文件中的SQL语句的ID保持一致
原生方式开发
ListUserEntity list sqlSession.selectList(com.mybatis.mapper.UserMapper.listUser, UserEntity.class);mapper代理开发
UserMapper mapper sqlSession.getMapper(UserMapper.class);
ListUserEntity list mapper.listUser();项目准备
项目结构 项目代码
userMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.mybatis.mapper.UserMapperselect idlistUser resultTypecom.mybatis.entity.UserEntityselect * from tb_user/select
/mapperUserMapper.java
package com.mybatis.mapper;import com.mybatis.entity.UserEntity;import java.util.List;/*** author honey* date 2023-07-26 21:04:23*/
public interface UserMapper {/*** 查询用户列表** return ListUserEntity*/ListUserEntity listUser();}MybatisTest02.java
package com.mybatis.test;import com.mybatis.entity.UserEntity;
import com.mybatis.mapper.UserMapper;
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;
import java.util.List;/*** author honey* date 2023-07-26 21:15:48*/
public class MybatisTest02 {public static void main(String[] args) throws IOException {// 1.读取加载mybatis-config.xml数据源、mybatis等配置InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);// 2.获取sqlSessionSqlSession sqlSession sqlSessionFactory.openSession();// 3.根据mappernamespaceUserMapper全限定名 idlistUser执行sql语句并将查询到的数据映射成对象ormUserMapper mapper sqlSession.getMapper(UserMapper.class);ListUserEntity list mapper.listUser();System.out.println(list);sqlSession.close();}
}SQL映射文件中namespace未设置为接口全限定名产生的问题
SQL映射文件中namespace未设置为接口全限定名会导致程序在执行的时候找不到namespace接口全限定名所对应的SQL映射文件。 解决方法 基于注解方式
优点去除XML配置提高了开发效率 缺点SQL语句植入Java代码如果需要修改SQL语句必须修改源码会导致维护成本增加基于XML方式维护性更强
项目准备
项目结构 项目代码
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom/groupIdartifactIdmybatis-annotation/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.18/version/dependency/dependencies/projectUserEntity.java
package com.mybatis.entity;/*** author honey* date 2023-07-26 15:29:38*/
public class UserEntity {private Integer id;private String name;Overridepublic String toString() {return UserEntity{ id id , name name \ };}
}UserMapper.java
package com.mybatis.mapper;import com.mybatis.entity.UserEntity;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** author honey* date 2023-07-26 21:04:23*/
public interface UserMapper {/*** 基于注解方式查询用户列表** return ListUserEntity*/Select(select * from tb_user)ListUserEntity listUserByAnnotation();
}mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://127.0.0.1:3306/db_mybatis?serverTimezoneGMT%2B8/property nameusername valueroot/property namepassword valueadmin//dataSource/environment/environmentsmappersmapper classcom.mybatis.mapper.UserMapper//mappers
/configurationMybatisTest01.java
package com.mybatis.test;import com.mybatis.entity.UserEntity;
import com.mybatis.mapper.UserMapper;
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;
import java.util.List;/*** author honey* date 2023-07-26 21:15:48*/
public class MybatisTest01 {public static void main(String[] args) throws IOException {// 1.读取加载mybatis-config.xml数据源、mybatis等配置InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);// 2.获取sqlSessionSqlSession sqlSession sqlSessionFactory.openSession();// 3.根据mappernamespacecom.mybatis.mapper.UserMapper idlistUser执行sql语句并将查询到的数据映射成对象ormListUserEntity list sqlSession.selectList(com.mybatis.mapper.UserMapper.listUserByAnnotation, UserEntity.class);System.out.println(list);// 3.根据mappernamespaceUserMapper全限定名 idlistUser执行sql语句并将查询到的数据映射成对象ormUserMapper mapper sqlSession.getMapper(UserMapper.class);ListUserEntity list2 mapper.listUserByAnnotation();System.out.println(list2);sqlSession.close();}
}
文章转载自: http://www.morning.hxlch.cn.gov.cn.hxlch.cn http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.wknbc.cn.gov.cn.wknbc.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.lywcd.cn.gov.cn.lywcd.cn http://www.morning.tzkrh.cn.gov.cn.tzkrh.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn http://www.morning.rfxg.cn.gov.cn.rfxg.cn http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com http://www.morning.zcwzl.cn.gov.cn.zcwzl.cn http://www.morning.qswws.cn.gov.cn.qswws.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.hpmzs.cn.gov.cn.hpmzs.cn http://www.morning.rmkyb.cn.gov.cn.rmkyb.cn http://www.morning.hyhqd.cn.gov.cn.hyhqd.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.snccl.cn.gov.cn.snccl.cn http://www.morning.ttdbr.cn.gov.cn.ttdbr.cn http://www.morning.fbjnr.cn.gov.cn.fbjnr.cn http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.fxkgp.cn.gov.cn.fxkgp.cn http://www.morning.wqbhx.cn.gov.cn.wqbhx.cn http://www.morning.wzjhl.cn.gov.cn.wzjhl.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.dwhnb.cn.gov.cn.dwhnb.cn http://www.morning.lwtld.cn.gov.cn.lwtld.cn http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.ydfr.cn.gov.cn.ydfr.cn http://www.morning.lflsq.cn.gov.cn.lflsq.cn http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.csdgt.cn.gov.cn.csdgt.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.brlgf.cn.gov.cn.brlgf.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.wdnkp.cn.gov.cn.wdnkp.cn http://www.morning.zfqdt.cn.gov.cn.zfqdt.cn http://www.morning.kmqjx.cn.gov.cn.kmqjx.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.lbqt.cn.gov.cn.lbqt.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.qqhmg.cn.gov.cn.qqhmg.cn http://www.morning.qhrsy.cn.gov.cn.qhrsy.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn