在本文中,我们将带你了解mybatis环境搭建及增删改查在这篇文章中,我们将为您详细介绍mybatis环境搭建及增删改查的方方面面,并解答mybatis环境搭建步骤常见的疑惑,同时我们还将给您一些技巧
在本文中,我们将带你了解mybatis环境搭建及增删改查在这篇文章中,我们将为您详细介绍mybatis环境搭建及增删改查的方方面面,并解答mybatis环境搭建步骤常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的04 Mybatis 框架的环境搭建及入门案例、MyBaits 入门之MyBatis环境搭建(第一篇)、mybaties的批量增删改查及普通增删改查、Mybatis - 1 基本的增删改查。
本文目录一览:- mybatis环境搭建及增删改查(mybatis环境搭建步骤)
- 04 Mybatis 框架的环境搭建及入门案例
- MyBaits 入门之MyBatis环境搭建(第一篇)
- mybaties的批量增删改查及普通增删改查
- Mybatis - 1 基本的增删改查
mybatis环境搭建及增删改查(mybatis环境搭建步骤)
一,搭建mybatis框架环境
- 创建maven工程
2.导入相关pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Mybatis</artifactId>
<groupId>com.ltf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Mybatis01</artifactId>
<packaging>war</packaging>
<name>Mybatis01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- ********************** junit单元测试依赖 ********************** -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- ********************** Java Servlet API ********************** -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<!-- ********************** Mybatis依赖 ********************** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- ********************** MysqL JDBC驱动 ********************** -->
<dependency>
<groupId>MysqL</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- ********************** 日志配置 ********************** -->
<!--记得修改mybatis.cfg.xml添加如下内容-->
<!--<setting name="logImpl" value="LOG4J2"/>-->
<!--核心log4j2jar包-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
<build>
<finalName>Mybatis01</finalName>
<resources>
<!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
<include>*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<!--使用mybatis-generator插件不能使用太高版本的MysqL驱动 -->
<dependency>
<groupId>MysqL</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
<configuration>
<overwrite>true</overwrite>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.jdbc.properties
jdbc.driver=com.MysqL.jdbc.Driver
jdbc.url=jdbc:MysqL://localhost:3306/MysqL?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
4.web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
5.mybatis.cfg.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"/>
<settings>
<setting name="logImpl" value="LOG4J2"/>
</settings>
<!-- 别名 -->
<typeAliases>
<!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
</typeAliases>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="jdbc"/>
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<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 resource="com/javaxl/mapper/BookMapper.xml"/>
</mappers>
</configuration>
二,基于ssm逆向工程的使用(IDEA)
1.安装相关插件
Free mybatis plugin
Mybatis generator
mybatis tools
maven helper
2.配置generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!-- 引入配置文件 -->
<properties resource="jdbc.properties"/>
<!--指定数据库jdbc驱动jar包的位置-->
<classpathEntry location="E:\\maven\\MysqL\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
<!-- 一个数据库一个context -->
<context id="infoGuardian">
<!-- 注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
</commentGenerator>
<!-- jdbc连接 -->
<jdbcConnection driverconnectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 01 指定javaBean生成的位置 -->
<!-- targetPackage:指定生成的model生成所在的包名 -->
<!-- targetProject:指定在该项目下所在的路径 -->
<javaModelGenerator targetPackage="com.ltf.model"
targetProject="src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否针对string类型的字段在set的时候进行trim调用 -->
<property name="trimstrings" value="false"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- 02 指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.ltf.mapper"
targetProject="src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 03 生成XxxMapper接口 -->
<!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
<!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
<!-- type="XMLMAPPER",生成sqlMap XML文件和独立的Mapper接口 -->
<javaClientGenerator targetPackage="com.ltf.mapper"
targetProject="src/main/java" type="XMLMAPPER">
<!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 配置表信息 -->
<!-- schema即为数据库名 -->
<!-- tableName为对应的数据库表 -->
<!-- domainObjectName是要生成的实体类 -->
<!-- enable*ByExample是否生成 example类 -->
<!--<table schema="" tableName="t_book" domainObjectName="Book"-->
<!--enableCountByExample="false" enableDeleteByExample="false"-->
<!--enableSelectByExample="false" enableupdateByExample="false">-->
<!--<!– 忽略列,不生成bean 字段 –>-->
<!--<!– <ignoreColumn column="FRED" /> –>-->
<!--<!– 指定列的java数据类型 –>-->
<!--<!– <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> –>-->
<!--</table>-->
<table schema="" tableName="t_mvc_book" domainObjectName="Book"
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableupdateByExample="false">
<!-- 忽略列,不生成bean 字段 -->
<!-- <ignoreColumn column="FRED" /> -->
<!-- 指定列的java数据类型 -->
<!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
</table>
</context>
</generatorConfiguration>
3.配置maven运行generator命令
配置完成之后会出现下图情况
运行之后会出现与数据库对应的实体类及接口
三,Mybatis增删改查案例
1.建立实现类
package com.ltf.service.impl;
import com.ltf.mapper.BookMapper;
import com.ltf.model.Book;
import com.ltf.service.BookService;
public class BookServiceImpl implements BookService {
private BookMapper bookMapper;
public BookMapper getBookMapper() {
return bookMapper;
}
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
@Override
public int deleteByPrimaryKey(Integer bid) {
return bookMapper.deleteByPrimaryKey(bid);
}
@Override
public int insert(Book record) {
return bookMapper.insert(record);
}
@Override
public int insertSelective(Book record) {
return bookMapper.insertSelective(record);
}
@Override
public Book selectByPrimaryKey(Integer bid) {
return bookMapper.selectByPrimaryKey(bid);
}
@Override
public int updateByPrimaryKeySelective(Book record) {
return bookMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(Book record) {
return bookMapper.updateByPrimaryKey(record);
}
}
2.建立测试类BookServiceImpltest
package com.ltf.service.impl;
import com.ltf.mapper.BookMapper;
import com.ltf.service.BookService;
import com.ltf.util.SessionUtil;
import junit.framework.TestCase;
import org.apache.ibatis.session.sqlSession;
public class BookServiceImpltest extends TestCase {
private BookService bookService;
sqlSession sqlSession;
@Override
protected void setUp() throws Exception {
BookServiceImpl bookService = new BookServiceImpl();
sqlSession = SessionUtil.openSession();
System.out.println(bookService.getBookMapper());
BookMapper mapper = sqlSession.getMapper(BookMapper.class);
bookService.setBookMapper(mapper);
System.out.println(bookService.getBookMapper());
this.bookService=bookService;
}
@Override
protected void tearDown() throws Exception {
}
public void testDeleteByPrimaryKey() {
System.out.println("删除方法");
System.out.println(this.bookService.deleteByPrimaryKey(63));
this.sqlSession.commit();
this.sqlSession.close();
}
public void testSelectByPrimaryKey() {
System.out.println(this.bookService.selectByPrimaryKey(62));
}
}
3.测试查询
4.运行删除方法
必须提交事务,否则无法删除
删除成功后
04 Mybatis 框架的环境搭建及入门案例
1.搭建 Mybatis 开发环境
mybatis的环境搭建
第一步:创建maven工程并导入坐标
第二步:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件
sqlMapConifg.xml
第四步:创建映射配置文件
IUserDao.xml
环境搭建的注意事项:
(1)创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一样的
(2)mybatis的映射配置文件位置必须和dao接口的包结构相同
(3)映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
(4)映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
当我们遵从了第2,3,4点之后,我们在开发中就无须再写dao的实现类。
具体操作步骤:
(1)创建 maven 工程
Create New Project--->Maven--->不选择骨架,直接点next--->填写GroupId和ArtifactId--->next--->finish即可,创建一个普通的java工程。
(2)mybatis的jar包引入
使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中
在 pom.xml 文件中添加 Mybatis3.4.5 的坐标
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>MysqL</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency>
(3)编写 sqlMapConfig.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"> <!-- mybatis的主配置文件 --> <configuration> <!-- 配置环境 --> <environments default="MysqL"> <!-- 配置MysqL的环境--> <environment id="MysqL"> <!-- 配置事务的类型--> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(连接池) --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息(以下内容需要根据实际情况进行修改) --> <property name="driver" value="com.MysqL.jdbc.Driver"/> <property name="url" value="jdbc:MysqL://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="plj824"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <!--方法1:xml配置(比较麻烦)--> <!--<mapper resource="dao/IUserDao.xml"/>--> <!--方法2:注解配置(推荐)--> <mapper/> </mappers> </configuration>
(4)创建映射配置文件IUserDao.xml (注解模式下,该文件可以删除)
mybatis的注解模式:
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定sql语句
同时需要在sqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
<?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写的是IUserDao这个接口文件的相对路径--> <mapper namespace="dao.IUserDao"> <!--配置查询所有--> <!--id对应IserDao接口的方法--> <select id="findAll" resultType="domain.User"> select * from user </select> </mapper>
入门案例:
数据库表User对应的实体类User.java
package domain; import java.io.Serializable; import java.util.Date; /** * 数据库表对应的实体类 */ public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; 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 Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
IUserDao.java(接口)
package dao; import domain.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface IUserDao { /** * 查询所有 * @return */ // 注解模式 @Select("select *from user") List<User> findAll(); }
测试类:
package test; import dao.IUserDao; import domain.User; 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.InputStream; import java.util.List; public class MybatisTest01 { /** * 入门案例 * @param args */ public static void main(String[] args) throws Exception{ //1.读取配置文件 InputStream in = Resources.getResourceAsstream("sqlMapConfig.xml"); //2.创建sqlSessionFactory sqlSessionFactoryBuilder builder=new sqlSessionFactoryBuilder(); //创建sqlSessionFactory的构建者builder sqlSessionFactory factory=builder.build(in); //利用构建者builder创建sqlSessionFactory //3.使用工厂生产sqlSession对象 sqlSession sqlSession = factory.openSession(); //4.使用sqlSessions对象创建Dao接口的代理对象 IUserDao userDao = sqlSession.getMapper(IUserDao.class); //5.使用代理对象执行方法 List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } //6.释放资源 sqlSession.close(); in.close(); } }
测试类代码步骤分析:
测试类代码原理分析:
MyBaits 入门之MyBatis环境搭建(第一篇)
MyBatis 简介
MyBatis的前身叫iBatis,本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
下面分步骤给搭建介绍mybatis 环境搭建。
1)在工程下引入mybatis-3.4.1.jar包,再引入数据库(MysqL,mssql..)包.
2)在src下新建一个配置文件conf.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" /> <!-- 配置mybatis运行环境 --> <environments default="development"> <environment id="development"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC" /> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <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="userMapper.xml"/> </mappers> </configuration>
这里是通过外部配置文件来存储数据库存信息的,所以加入一个jdbc.properties的数据库存信息
driver=com.microsoft.sqlserver.jdbc.sqlServerDriver url=jdbc:sqlserver://127.0.0.1;databaseName=test username=sa password=123456
3)建立一个映射文件 userMapper.xml
<?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="hw.com.ser.IUser"> <!-- 查询全部用户 --> <select id="queryUsers" resultType="hw.com.pojo.User"> select * from MS_User </select> <selectid="queryUserById" resultType="hw.com.pojo.User" parameterType="int"> Select * From Ms_User Where id=#{id} </select> </mapper>
(这里要注意的是,namespace属性,因为,此实例是通过接口映射的方式,所以,namespace属性一点要写成接口的路径)附图:
4)建一个映射接口类
package hw.com.ser; import java.util.List; import hw.com.pojo.User; public interface IUser { public List<User> queryUsers(); public User queryUserById(int id); }
5)建立一个sqlSessionFactory
package hw.com.util; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Properties; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlSessionFactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; public class sqlSessionFactoryUtil { private static sqlSessionFactory sqlSessionFactory = null; private static final Class CLASS_LOCK = sqlSessionFactoryUtil.class; private sqlSessionFactoryUtil() { } public static sqlSessionFactory initsqlSessionFactory() { String resource = "conf.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsstream(resource); } catch (IOException e) { e.printstacktrace(); } synchronized (CLASS_LOCK) { if (sqlSessionFactory == null) { sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream); } } return sqlSessionFactory; } public static sqlSession opensqlSession(){ if(sqlSessionFactory==null){ initsqlSessionFactory(); } return sqlSessionFactory.openSession(); } }
6)建一个pojo
package hw.com.pojo; import java.util.Date; public class User { private String Id; private String UserName; private String UserPwd; private int DeptmentId; private String UserTrueName; private String Email; private int LearnCenterId; private Date CreateDate; private Date LastModifyDate; private int UserStatus; public User() { super(); // Todo Auto-generated constructor stub } public String getId() { return Id; } public void setId(String id) { Id = id; } public String getUserName() { return UserName; } public void setUserName(String userName) { UserName = userName; } public String getUserPwd() { return UserPwd; } public void setUserPwd(String userPwd) { UserPwd = userPwd; } public int getDeptmentId() { return DeptmentId; } public void setDeptmentId(int deptmentId) { DeptmentId = deptmentId; } public String getUserTrueName() { return UserTrueName; } public void setUserTrueName(String userTrueName) { UserTrueName = userTrueName; } public String getEmail() { return Email; } public void setEmail(String email) { Email = email; } public int getLearnCenterId() { return LearnCenterId; } public void setLearnCenterId(int learnCenterId) { LearnCenterId = learnCenterId; } public Date getCreateDate() { return CreateDate; } public void setCreateDate(Date createDate) { CreateDate = createDate; } public Date getLastModifyDate() { return LastModifyDate; } public void setLastModifyDate(Date lastModifyDate) { LastModifyDate = lastModifyDate; } public int getUserStatus() { return UserStatus; } public void setUserStatus(int userStatus) { UserStatus = userStatus; } @Override public String toString() { return "User [Id=" + Id + ",UserName=" + UserName + ",UserPwd=" + UserPwd + ",DeptmentId=" + DeptmentId + ",UserTrueName=" + UserTrueName + ",Email=" + Email + ",LearnCenterId=" + LearnCenterId + ",CreateDate=" + CreateDate + ",LastModifyDate=" + LastModifyDate + ",UserStatus=" + UserStatus + "]"; } }
7) 在main方法下做测试
package hw.com.Day1.main; import java.util.List; import org.apache.ibatis.session.sqlSession; import hw.com.pojo.User; import hw.com.ser.IUser; import hw.com.util.sqlSessionFactoryUtil; public class UserTest { public static void main(String[] args) { sqlSession sqlSession=null; try { sqlSession=sqlSessionFactoryUtil.opensqlSession(); IUser iUser=sqlSession.getMapper(IUser.class); List<User> users=iUser.queryUsers(); if(users.size()>0){ for (User user : users) { System.out.println(user.toString()); } } } catch (Exception e) { e.printstacktrace(); } } }
mybaties的批量增删改查及普通增删改查
数据库:
create table school(
id int(11) not null auto_increment comment ''主键'',
name varchar(20) comment ''学校名称'',
address varchar(100) comment ''学校地址'',
create_time datatime comment ''数据上传时间'',
primary key (id)
)
实体类:
package com.test.entity;
public class School{
private Integer id;//主键id
private String name;//学校名称
private String address//学校地址
private Date createTime//数据上传时间
}
现在开始添加功能
mybaties: schooMapper.xml:
<mapper namespace="com.test.dao.SchoolMapper">
<resultMap type="com.test.entity.School" id="schoolMap">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="address" property="address" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="DATE"/>
</resultMap>
<sql id="s_sql" >
name,address,create_time
</sql>
<!-- 普通的插入数据不能返回id -->
<insert id="save" parameterType="com.test.entity.School">
insert into school (<include refid="s_sql"/>)values(#{name},#{address},#{createTime})
</insert>
</mapper>
下面的可以返回id,但是需要主键为自增(id在这儿要不要都可以)
<!-- 插入数据返回id,方法一 这个需要是自增的id -->
<insert id="saveReturnIdOne" parameterType="com.test.entity.School" useGeneratedKeys="true" keyProperty="id">
insert into school (id,<include refid="s_sql"/>)values(#{id},#{name},#{address},#{createTime})
</insert>
这个第二种添加可以返回主键id的,好像是返回添加的最后一个id--不需要自增(这个不确切知道)
<!-- 插入数据返回id,方法一 这个返回最后添加的一条id -->
<insert id="saveReturnIdTwo" parameterType="com.test.entity.School" useGeneratedKeys="true">
insert into school (<include refid="s_sql"/>)values(#{name},#{address},#{createTime})
<selectKey keyProperty="id" resultType="int" order="AFTER" >
SELECT LAST_INSERT_ID() AS VALUE
</selectKey>
</insert>
--------现在开始批量添加
<!-- 这个批量插入数据 -->
<insert id="bathSave" parameterType="java.util.List">
insert into school (<include refid="s_sql"/>)values
<foreach collection="list" index="index" item="l" separator=",">
(#{l.name},#{l.address},#{l.createTime})
</foreach>
</insert>
java代码:
public int save(School test);
public int saveReturnIdOne(School test);
public int saveReturnIdTwo(School test);
public void bathSave(List<School> list);
现在开始删除功能
<!-- 这个普通删除数据 -->
<delete id="deleteById" parameterType="java.lang.Integer">
delete from school where id=#{id}
</delete>
<!-- 这个批量删除数据 -->
<delete id="bathDelete" parameterType="java.util.List">
delete from school where id in
<foreach collection="list" index="index" item="l" open="(" close=")" separator=",">
#{l}
</foreach>
</delete>
<delete id="bathDeleteTwo" parameterType="java.util.List">
delete from school where id in (${id})
</delete>
java代码:
public int deleteById(Integer list);
public int bathDelete(List<Integer> list);
public int bathDeleteTwo(Map<String,String>id);
现在开始修改功能
<!-- 普通修改 -->
<update id="update" parameterType="com.test.entity.School">
update school set name=#{name}, address=#{address}, create_time=#{createTime} where id=#{id,jdbcType=INTEGER}
</update>
<!-- 有选择性的修改数据 -->
<update id="updateSet" parameterType="com.test.entity.School">
update school
<set>
<if test="name != null">
name=#{name},
</if>
<if test="address !=null ">
address=#{address},
</if>
<if test="createTime !=null ">
create_time=#{createTime}
</if>
</set>
where id=#{id}
</update>
<!-- 这个批量修改需要在数据库的url后面拼接 &allowMultiQueries=true 意思是同时执行多条,否则报错 -->
<update id="bathUpdate" parameterType="java.util.List">
<foreach collection="list" index="index" item="l" open="" close="" separator=";">
update school
<set>
<if test="l.name != null">
name=#{l.name},
</if>
<if test="l.address !=null ">
address=#{l.address},
</if>
<if test="l.createTime !=null ">
create_time=#{l.createTime}
</if>
</set>
where id=#{l.id,jdbcType=INTEGER}
</foreach>
</update>
<!-- 还有一种批量修改多个id,即 id in(1,2,3,4) 方法类同批量删除,这里不写了 -->
java代码:
public void update(TestEntity test);
public void updateSet(TestEntity test);
public void bathUpdate(List<TestEntity> list);
现在开始查询功能(批量查询和删除的一样)
xml:
<!-- 根据id查询一条 -->
<select id="getById" resultMap="schoolMap" >
select id,<include refid="s_sql"/> from school where id =#{id}
</select>
<!-- 根据地址分页查询 -->
<select id="getLimit" resultMap="schoolMap" parameterType="java.util.Map">
select id,<include refid="s_sql"/> from school where address=#{address} limit #{begin},#{end}
</select>
<!-- 根据名字模糊查询 -->
<select id="getLikeName" resultMap="schoolMap">
select id,<include refid="s_sql"/> from school where name like concat(''%'',#{name},''%'')
</select>
<!-- 根据名字模糊查询所有id集合 -->
<select id="getIdsLikeName" resultType="java.lang.String">
select group_concat(id) from school where name like concat(''%'',#{name},''%'')
</select>
<!-- 根据实体类属性选择查询 -->
<select id="getWhere" resultMap="schoolMap">
select id,<include refid="s_sql"/> from school
<where>
<if test="id != null">
id=#{id}
</if>
<if test="name != null">
and name=#{name}
</if>
<if test="address !=null ">
and address=#{address}
</if>
<if test="createTime !=null ">
and create_time=#{createTime}
</if>
</where>
</select>
java代码:
public School getById(Integer id);
public List<School > getLimit(Map<String, Object> map);
public List<School > getLikeName(String name);
public String getIdsLikeName(String name);
public List<School > getWhere(School test);
下面是从其它地方看到:
同时执行多条sql的办法:
1、最简单的办法:在MySQL的连接字符串中设置allowMultiQueries参数置为true。(只有MySQL Connector/J 3.1.1以上版本才支持) 。例如:在jdbc下设置连接字符串的时候设成如下的形式:
jdbc:mysql://192.168.3.180/sample?user=root&password=&allowMultiQueries=true就可以执行多条语句了
在odbc下也是可以设置的,方法如下:
设置 ODBC -- 配置 --Detials -- Flags 3 -- 钩上 Allow multiple statements,这样就可以了。
结论:第一种方式最简单。
2、在程序中对SQL语句以分号拆分成多条SQL语句,然后使用Statement的addBatch方法,最后executeBatch就行。
希望对以后遇到此类问题的朋友有所帮助。
关于Statement的execute(String sql)语句能够同时执行多条SQL语句, 可以看MySQL自带的测试例子:
可查看testsuite.regression包下的ResultSetRegressionTest类: 这个可以查看:MySQL for Java的SQL注入测试
public class ResultSetRegressionTest extends BaseTestCase {
public void testBug33678() throws Exception {
if (!versionMeetsMinimum(4, 1)) {
return;
}
createTable("testBug33678", "(field1 INT)");
// allowMultiQueries=true设置
Connection multiConn = getConnectionWithProps("allowMultiQueries=true");
Statement multiStmt = multiConn.createStatement();
try {
multiStmt.setFetchSize(Integer.MIN_VALUE);
// 一次性执行多条SQL语句
multiStmt.execute("SELECT 1 UNION SELECT 2; INSERT INTO testBug33678 VALUES (1); UPDATE testBug33678 set field1=2; INSERT INTO testBug33678 VALUES(3); UPDATE testBug33678 set field1=2 WHERE field1=3; UPDATE testBug33678 set field1=2; SELECT 1");
// 以下代码省略...
}
}
还可以查看英文API Mapper XML Files
Mybatis - 1 基本的增删改查
1.编写主配置文件 - mybatis.xml
mybatis.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"/>
<!-- 定义别名 -->
<typeAliases>
<!-- <typeAlias type="com.bjsxt.pojo.Student" alias="Student"/> -->
<package name="com.bjsxt.pojo"/>
</typeAliases>
<!-- 配置运行环境 -->
<environments default="testEN">
<environment id="testEN">
<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 resource="com/bjsxt/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
2.工具类 - 获取SqlSession
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSession getSqlSession(){
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
if(sqlSessionFactory == null){
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
return sqlSessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3.写POJO类 - pojo.Student
public class Student {
private Integer id;
private String name;
private int age;
private double score;
public Student() {
super();
}
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
getsettostring...
}
4.定义接口 - mapper.StudentMapper
public interface StudentMapper {
void insertStudent(Student student);
void insertStudentCacheId(Student student);
void deleteStudent(int id);
void updateStudent(Student student);
Student selectById(int id);
List<Student> selectAllStudent();
List<Student> selectByName(String name);
}
5.编写接口对应的SQL语句 - StudentMapper.xml
<?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.bjsxt.mapper.StudentMapper">
<!--5.1 parameterType可以省略-->
<insert id="insertStudent" parameterType="Student">
insert into student(name,age,score) values(#{name},#{age},#{score})
</insert>
<insert id="insertStudentCacheId">
insert into student(name,age,score) values(#{name},#{age},#{score})
<!--5.2 insert中使用selectKey标签可将自动生成的ID注入到内存中对象的ID-->
<selectKey resultType="int" keyProperty="id" order="AFTER">
select @@identity
</selectKey>
</insert>
<delete id="deleteStudent">
delete from student where id=#{id}
</delete>
<update id="updateStudent">
update student set name=#{name},age=#{age},score=#{score} where id=#{id}
</update>
<select id="selectById" resultType="Student">
select name,age,score from student where id=#{id}
</select>
<select id="selectAllStudent" resultType="Student">
select name,age,score from student
</select>
<select id="selectByName" resultType="Student">
select id,name,age,score from student where name like ''%'' #{name} ''%''
<!-- select id,name,age,score from student where name like concat("%",#{name},"%") -->
<!-- select id,name,age,score from student where name like "%${value}%" -->
</select>
</mapper>
6.测试
package com.bjsxt.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.bjsxt.mapper.StudentMapper;
import com.bjsxt.pojo.Student;
import com.bjsxt.utils.MybatisUtil;
public class StudentTest {
private StudentMapper mapper;
private SqlSession sqlSession;
@Before
public void before(){
sqlSession = MybatisUtil.getSqlSession();
mapper = sqlSession.getMapper(StudentMapper.class);
}
@After
public void After(){
if(sqlSession != null ){
sqlSession.close();
}
}
@Test
public void testSave(){
Student student = new Student("张三",23,93.4);
System.out.println("插入前:student"+student);
mapper.insertStudent(student);
System.out.println("插入后:student"+student);
sqlSession.commit();
}
@Test
public void testSave2(){
Student student = new Student("张三",23,93.4);
System.out.println("插入前:student"+student);
mapper.insertStudentCacheId(student);
System.out.println("插入后:student"+student);
sqlSession.commit();
}
@Test
public void testDelete(){
mapper.deleteStudent(9);
sqlSession.commit();
}
@Test
public void testUpdate(){
Student student = new Student("李四",24,96.4);
student.setId(5);
mapper.updateStudent(student);
sqlSession.commit();
}
@Test
public void testSeletcById(){
Student student = mapper.selectById(2);
System.out.println(student);
}
@Test
public void testSelectAllStudents(){
List<Student> students = mapper.selectAllStudent();
for (Student student : students) {
System.out.println(student);
}
}
@Test
public void testSeletcByName(){
List<Student> list=mapper.selectByName("三");
for (Student student : list) {
System.out.println(student);
}
}
}
关于mybatis环境搭建及增删改查和mybatis环境搭建步骤的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于04 Mybatis 框架的环境搭建及入门案例、MyBaits 入门之MyBatis环境搭建(第一篇)、mybaties的批量增删改查及普通增删改查、Mybatis - 1 基本的增删改查等相关内容,可以在本站寻找。
本文标签: