如何获得Mybatis?
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
数据持久化
为什么需要持久化?
Dao层,Service层,Controller层
帮助程序员将数据存入到数据库中。
方便
传统的JDBC代码太复杂了。简化,框架。自动化
不用Mybatis也可以。更容易上手。技术没有高低之分。
优点
简单易学
灵活
sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。
最重要的一点:使用的人多!
思路:搭建环境–>导入Mybatis–>编写代码–>测试!
CREATE DATABASE `mybatis`;
CREATE TABLE `users`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `users` (`id`,`name`,`pwd`) VALUES
(1,'索隆','123456'),
(2,'索隆1','783456'),
(3,'索隆2','893456');
搭建项目
新建一个空项目
删除src目录
导入依赖
<dependencies>
<!-- junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis依赖-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
<mappers>
<mapper class="com.xiao.dao.UserDao"/>
</mappers>
package com.xiao.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;
//编写 Mybatis 工具类 获取SqlSessionFactory
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
static{//静态代码块封装 从一开始就会加载
String resource = "mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlSession 对象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
package com.xiao.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
package com.xiao.Dao;
import com.xiao.pojo.User;
import java.util.List;
public interface UserDao {
public abstract List<User> getUserList();
}
<?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 命名空间 : 这里等价于之前缩写的 UserDaoImp 指向一个Mapper接口-->
<mapper namespace="com.xiao.Dao.UserDao">
<!-- id 表示的是实现 namespace 中所对应接口的方法 resultType 表示的是返回值类型 -->
<select id="getUserList" resultType="com.xiao.pojo.User">
select * from mybatis.users
</select>
</mapper>
public class UserMapperTest {
@Test
public void test(){
//获取Sqlsession 对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//从 接口的反射类 获得相应的 mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/* 1.这里一开始就有错误 命名的重名了 */
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭资源
sqlSession.close();
}
}
可能会遇到的问题
通过管理员下的命令窗口打开mysql
namespace中的包名要和接口的包名一致。
id:就是对应的namespace中的方法名;
resultType:sql语句的返回值 类型在包中的位置
parameter:参数类型
//查询对应的具体人的信息
User getUser(int id);
<select id="getUser" parameterType="int" resultType="com.xiao.pojo.User">
select * from mybatis.users where id=#{id}
</select>
//获取id确定的 用户信息
@Test
public void getUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUser(1);
System.out.println(user);
sqlSession.close();
}
<insert id="insertUser" parameterType="com.xiao.pojo.User">
insert into mybatis.users (id, name, pwd) VALUES (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="com.xiao.pojo.User">
update mybatis.users set name=#{name}, pwd=#{pwd} where id=#{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.users where id=#{id}
</delete>
注意点:
假设我们实体类或数据库中的字段过多,我们应当考虑使用Map
//根据Map传参实现不需要 传入大量的参数,如果 是之前的查询 需要new 一个User ,但 如果字段过多,可以通过Map传参
User getUserBy(Map<String,Object> map);//当需要传入多个参数
<select id="getUserBy" parameterType="map" resultType="com.xiao.pojo.User">
select * from mybatis.users where id=#{Id} and name=#{Name}
</select>
List<User> users = mapper.getUserBy1("%索%");
select * from mybatis.users where name like "%"#{value}"%";
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
学会使用多套运行环境
Mybatis默认的事务管理器就是JDBC,连接池:POOLED
我们可以通过properties属性实现引用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。[db.properties]
编写一个配置文件
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=true
username=root
password=123456
在核心文件中映入
<!-- 引入资源文件-->
<properties resource="db.properties"></properties>
<!-- 还可以在之间添加一些 其他属性-->
类别名
<typeAliases>
<typeAlias type="com.xiao.pojo.User" alias="User"></typeAlias>
</typeAliases>
也可以指定一个包名,Mybatis会在包名下面搜索需要的JavaBean,比如扫描实体类的包,他的默认别名就是这个类的类名,首字母小写!
包别名
<typeAliases>
<package name="com.xiao.pojo"/>
</typeAliases>
@Alias("hello")
public class User {
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
-mybatis-plus
-通用mapper
-mybatis-generator-core
方式一:使用相对于类路径的资源引用
<mappers>
<mapper resource="com/xiao/Dao/UserMapper.xml"/>
<!-- 2.这里的映射路径 映射的是一个xml文件 所以前面的路径指代 是用/隔开 -->
</mappers>
方式二:使用映射器接口实现类的完全限定类名
<mappers>
<mapper class="com.xiao.Dao.UserMapper"/>
</mappers>
注意点:
方式三:将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="com.xiao.Dao"/>
<!-- 2.这里的映射路径 映射的是一个xml文件 所以前面的路径指代 是用/隔开 -->
</mappers>
注意点:
不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
这里面的每一个Mapper,就代表一个具体的业务!
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_56727438/article/details/121911699
内容来源于网络,如有侵权,请联系作者删除!