具体流程
通过mybatis对mysql数据库进行操作
创建的时候,包要一层一层
1、创建一个mevan工程,在pom.xml文件中导入两个依赖的jar包
2、在main下创建一个resource类型文件,且和java下面 的每一层目录都要相对应,,注意层次感
3、首先要创建一个实体类,这实体类的属性要和表格中的字段名相对应,且类型也要对应,实体类中的类型要用引用类型,开头都是大写,属性的get 、set的方法都要有,还有toString方法
4、写一个接口,里面是方法,一般就是增删改查这四个方法
5、在resource下面写一个对应的xml文件,写四个方法
6、在resource下创建连接mysql的配置文件
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://192.168.119.180:3306/test?useSSL=false
mysql.username=root
mysql.password=12345678
#3306后面是数据库名称
7、在resource下面创建xml文件,mybatis.xml
开始写一些配置
8、在测试类中开始测试
1、pom.xml配置文件
这个文件中主要就是导入了两个依赖的jar包,,改成8版本要注意
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
#主要就是这两个jar包的导入
2、实体类要求
对应这数据库中的表,写对应的实体了,字段名称和属性名称对应,类型对应
1、mysql中数据表的字段名
mysql> desc user_info;
+---------------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------------------+------+-----+---------+----------------+
| user_id | int(6) unsigned zerofill | NO | PRI | NULL | auto_increment |
| user_name | varchar(10) | NO | | NULL | |
| user_account | varchar(30) | NO | | NULL | |
| user_pass | varchar(50) | NO | | NULL | |
| user_phone | varchar(20) | NO | UNI | NULL | |
| user_gender | char(1) | NO | | NULL | |
| user_pid | varchar(20) | NO | UNI | NULL | |
| user_province | varchar(50) | NO | | NULL | |
| user_city | varchar(50) | NO | | NULL | |
| user_district | varchar(50) | NO | | NULL | |
| user_address | varchar(200) | NO | | NULL | |
| user_balance | decimal(10,2) | NO | | 2000.00 | |
+---------------+--------------------------+------+-----+---------+----------------+
2、java实体类属性名称
private Integer user_id;
private String user_name;
private String usr_account;
private String usr_pass;
private String user_phone;
private String user_gender;
private String user_pid;
private String user_province;
private String user_city;
private String user_district;
private String user_address;
private Double user_balance;
#还有就是get、set方法,toString方法,。。构造方法没说,,可以研究一下
3、mapper接口中的方法
接口中的方法是要映射到xml文件中,和xml文件中的增删改查四个方法相对应的
增删改查
//查询
List<UserInfo> findBy(UserInfo useInfo);
//UserInfo是你写的实体类的名称,直接传实体类,返回值也是实体类的集合,,要是查询全部,就将表中符合条件的信息全部返回
//删除
int removeBy(int[] ids)
//修改
int update(UserInfo userInfo)
//用这个方法的时候,注意xml文件的方法中要添加一些限制条件,不然就全表修改同一字段值
//添加
int add(List<UserInfo> list)
//注意数据的添加类型,实体类一个一个添加数据,能不能写构造方法等
4、与mapper接口对应的xml文件配置
#xml文件是有格式的,要满足固定的格式
//这个namespace是Mpper的带包全路径的名字
1、每个标签后的id后填写对应mapper接口中的方法名,就是通过id进行捆绑关联的
2、parameterMap | resultMap 的存在是为了修正实体类的属性和数据表中字段名称,类型,数量不一致而存在的
3、parameterType | resultType 直接关联实体类型,,你自己写的那个实体类的类名
4、简单的固定的where条件: where field=value and ..., 可以直接写在查询语句后面,不用where标签
5、复杂动态的where条件 :<where></where> 功能1、无条件时不添加where,多条件时自动去除第一个and
6、单分支:<if test="条件"></if>
7、多分支:<choose><when test="条件1"></when>...<otherwise></otherwise></choose>
8、条件表达式不能出现< | <= 与标签的语法冲突,如果遇到有需要的时候,就用>或者>=来等价替换一下
9、复杂动态的修改操作 :<set></set> 功能1、多字段修改时自动去除最后一个逗号,
10、 parameterType : 非基本类型array | list | map,,只能是这三种类型 其他类型不可以
11、循环 :其中 collection item 必须有,其他可以没有
<foreach collection"array|list|map" item="alias别名" poen="开始符号" close="结束符号" separator="分隔符" index="ix">
#{alias},#{ix}
</foreach>
//第一个是查询方法
<select id="findBy" parameterType="UserInfo" resultType="UserInfo">
select user_id, user_name,user_gender,user_city from user_info
<where>
<choose>
<when test="null != user_id">
user_id=#{user_id}
</when>
<when test="null != user_phone">
user_phone=#{user_phone}
</when>
<when test="null != user_pid">
user_pid=#{user_pid}
</when>
<otherwise>
<if test="null != user_name">
and user_name like concat(#{user_name},'%')
</if>
<if test="null != user_gender">
and user_gender=#{user_gender}
</if>
<if test="null != user_province">
and user_province=#{user_province}
</if>
<if test="null != user_city">
and user_city=#{user_city}
</if>
<if test="null != user_district">
and user_district=#{user_district}
</if>
<if test="null != user_balance">
and #{user_balance}>=user_balance
</if>
</otherwise>
</choose>
</where>
</select>
//删除方法
<delete id="removeBy" >
delete from user_info where user_id
<foreach collection="array" item="id" open="in (" close=")" separator=",">
#{id}
</foreach>
</delete>
//修改操作
<update id="update" parameterType="UserInfo">
update user_info
<set>
<if test="null != user_phone">
user_phone=#{user_phone},
</if>
<if test="null != user_pid">
user_pid=#{user_pid},
</if>
<if test="null != user_name">
user_name=#{user_name},
</if>
<if test="null != user_gender">
user_gender=#{user_gender},
</if>
<if test="null != user_province">
user_province=#{user_province},
</if>
<if test="null != user_city">
user_city=#{user_city},
</if>
<if test="null != user_district">
user_district=#{user_district},
</if>
<if test="null != user_address">
user_address=#{user_address},
</if>
</set>
where user_id=#{user_id}
</update>
//添加操作
<insert id="add">
insert into user_info(user_name,user_account,user_pass,user_phone,user_gender,user_pid,user_province,
user_city,user_district,user_address) values
<foreach collection="list" item="user" separator=",">
(#{user.user_name},#{user.user_account},#{user.user_pass},#{user.user_phone},#{user.user_gender},
#{user.user_pid},#{user.user_province},#{user.user_city},#{user.user_district},#{user.user_address})
</foreach>
</insert>
</mapper>
1、
choose、when、otherwise 标签
这三个标签需要组合在一起使用,类似于 Java 中的 switch、case、default。只有一个条件生效,也就是只执行满足的条件 when,没有满足的条件就执行 otherwise,表示默认条件。
2、
foreach 标签
foreach标签主要有以下参数:
item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details,在list和数组中是其中的对象,在map中是value。
index :在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。
open :表示该语句以什么开始
close :表示该语句以什么结束
separator :表示元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。
5、连接mysql配置文件
在resource下面创建一个DataSource.properties文件,填写下面内容
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://192.168.119.180:3306/test?useSSL=false
mysql.username=root
mysql.password=12345678
#3306后面是数据库名称
#下面就是数据库名称,数据库密码
6、mybatis配置文件
在resource下面创建一个mybatis.xml 文件,然后开始配置文件之旅
这个配置文件也是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>
//连接mysql配置文件的路径,可以不用,将配置文件的内容直接写在下面
<properties resource="datasource.properties"/>
<typeAliases>
//这个是实体类所在的文件路径
<package name="cn.kgc.entity"/>
</typeAliases>
<!-- 可以配多个数据源,只要关系数据库就行,,,default和id要绑定起来,用什么数据库,写什么-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
//后买写的配置文件里面的键,,也可以直接将配置文件的值,写在后面,不用配置文件
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!-- <mapper class | package> 二选一 -->
<mappers>
<!-- <mapper resource="cn/kgc/mapper/userMapper.xml"/> 缺陷,每个 *Mapper.xml 都需要单独配置-->
//mapper的xml文件的路径
<package name="cn.kgc.mapper"/>
</mappers>
</configuration>
7、测试类
这个类写main方法,开始调用方法,开始测试
package cn.kgc;
import cn.kgc.entity.UserInfo;
import cn.kgc.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;
/**
*mybatis : 半自动化ORM(Object Relationship Mapping)框架
* 动态sql
*
* 框架
* User实体类:属性:userName,userPass
* select ... from where userName=#{userName} and userPass=#{userPass} : ?的值是映射进去的
*
* 以前java
* select ... from where userName=? and userPass=? : ?的值是映射进去的
*
*/
public class App
{
public static void main( String[] args ) throws IOException {
final String RESOURCE = "mybatis.xml";
InputStream stream = Resources.getResourceAsStream(RESOURCE);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession sqlSession = factory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserInfo info = new UserInfo();
info.setUser_city("南京市");
List<UserInfo> list = userMapper.findBy(info);
for (UserInfo userInfo : list) {
System.out.println(userInfo);
}
/* int[] arr = {4};
int re = userMapper.removeBy(arr);*/
List<UserInfo> list = new ArrayList<>();
info.setUser_gender("男");
info.setUser_city("上海");
info.setUser_province("江苏省");
info.setUser_address("河道旁边");
info.setUser_name("SB");
info.setUser_phone("13700790156");
info.setUser_pid("32072119970929323x");
info.setUsr_account("不知道");
info.setUsr_pass("不知道了");
info.setUser_district("随便写的");
list.add(info);
int add = userMapper.add(list);
//调用这个方法的时候,注意一下,你写的xml文件的条件,要给一个id,不然不知道修改哪一个
info.setUser_address("沙雕欢乐窝");
info.setUser_id(48);
userMapper.update(info);
sqlSession.close();
}
}