新建项目以及添加依赖可以参考此链接中的内容,实现的步骤无变化
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
username=root
password=111111
SQL环境变量的配置主要包括以下几点:
DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties">properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
<typeAliases>
<package name="com.lcl.pojo"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">transactionManager>
<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>
<package name="com.lcl.mapper"/>
mappers>
configuration>
可视化窗口也就是数据库中的数据,可以在开发工具中进行查看,并且操作数据
具体的操作过程,参考以下连接中的内容:
新建可视化窗口操作步骤
自动生成实体类
public class Users {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Users() {
}
public Users(Integer id, String username, Date birthday, String sex, String address) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public Users(String username, Date birthday, String sex, String address) {
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = 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 "Users{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
实现动态代理:
具体的含义就是说在接口中创建相应的方法,之后再相同全类名的xml文件中编写具体的实现增删改查代码;
通过Java代码在对数据库中的数据进行增删改查时,只需要读取配置文件,创建动态代理的对象,调用接口中的方法【实际上执行的时xml文件中操作】,实现对数据的修改
创建动态代理对象的步骤:
//读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//读取SqlSession对象
SqlSession sqlSession = factory.openSession();
//取出动态代理的对象,完成接口中方法的调用,实则是完成调用xml文件中相应的标签功能
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
public interface UsersMapper {
//查询全部用户
List<Users> getAll();
//根据用户主键查询用户
Users getUsers(Integer id);
//根据用户名实现模糊查询
List<Users> getUsersByName(String username);
//用户的更新
void updateUsers(Users users);
//根据用户主键删除用户
int deleteUsers(Integer id);
//添加用户
void InsertUsers(Users users);
//优化模糊查询
List<Users> getUsersGood(String name);
//使用用户名和地址进行模糊查询
/*使用注解,方便在xml文件中可以使用${}取到数据*/
List<Users> getUsersByNameOrAddress(
@Param("columnName") String columnName,
@Param("columnValue") String columnValue);
}
这里面主要就是SQL语句,需要注意以下几点:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcl.mapper.UsersMapper">
<select id="getAll" resultType="users">
select id,username,birthday,sex,address
from users
select>
<select id="getUsers" resultType="users" parameterType="int">
select id,username,birthday,sex,address
from users where id = #{id}
select>
<select id="getUsersByName" parameterType="string" resultType="users">
select id,username,birthday,sex,address
from users where username like '%${name}%'
select>
<update id="updateUsers" parameterType="users">
update users set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
update>
<insert id="InsertUsers" parameterType="users">
<selectKey keyProperty="id" resultType="int" order="AFTER">
select last_insert_id()
selectKey>
insert into users(username,birthday,sex,address) values
(#{username},#{birthday},#{sex},#{address})
insert>
<delete id="deleteUsers" parameterType="int">
delete from users where id=#{id}
delete>
<select id="getUsersGood" parameterType="string" resultType="users">
select id,username,birthday,sex,address
from users where username like concat('%',#{name},'%')
select>
<select id="getUsersByNameOrAddress" resultType="users">
select id,username,birthday,sex,address
from users where ${columnName} like concat('%',#{columnValue},'%')
select>
mapper>
public class Mytest {
SqlSession sqlSession;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@Before
public void getSqlSession() throws IOException {
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
sqlSession = factory.openSession();
}
@After
public void closeSqlSession(){
sqlSession.close();
}
@Test
public void testGetAll(){
//取出动态代理的对象,完成接口中方法的调用,实则是完成调用xml文件中相应的标签功能
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
// System.out.println(usersMapper.getClass());
//sqlSession.selectList("com.lcl.mapper.UsersMapper")
//下面的方法就是在调用接口中的方法,mybatis已经为我们把功能代理出来了
List<Users> usersList = usersMapper.getAll();
usersList.forEach(users -> System.out.println(users));
}
//根据用户主键查询用户
@Test
public void testGetUsers(){
//取出代理对象,完成接口中方法的调用,实际上执行的是xml文件中的查询方法
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
Users users = usersMapper.getUsers(4);
System.out.println(users);
}
//通过用户的姓名进行模糊查询
@Test
public void testGetUsersByName(){
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
List<Users> usersList = usersMapper.getUsersByName("小");
usersList.forEach(users -> System.out.println(users));
}
//根据用户id更新用户数据
@Test
public void testUpdateUsers() throws ParseException {
//获取代理代理对象,完成接口中方法的调用,实际上执行xml文件中的更新操作
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
usersMapper.updateUsers(new Users(7, "李华", sdf.parse("1999-05-25"), "2", "南阳市"));
sqlSession.commit();
}
//测试添加用户
@Test
public void testInsertUsres() throws ParseException {
//获取代理对象
Users users = new Users("翠花",sdf.parse("2006-05-14"), "1", "郑州市");
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
usersMapper.InsertUsers(users);
sqlSession.commit();
System.out.println(users);
}
//根据用户id删除用户
@Test
public void testDeleteUsers(){
//获取代理对象,完成接口中删除放的的调用,实际上执行的是xml中的方法
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
int deleteUsers = usersMapper.deleteUsers(5);
System.out.println(deleteUsers);
sqlSession.commit();
}
@Test
public void testGetUsersByNameOrAddress() throws IOException {
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = factory.openSession();
//获取代理对象,完结接口中查询语句的调用没实际上执行的是xml中方法的调用
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
List<Users> usersByNameOrAddress = usersMapper.getUsersByNameOrAddress("address", "市");
usersByNameOrAddress.forEach(users -> System.out.println(users));
sqlSession.close();
}
//获取全球唯一标识符
@Test
public void testUUID(){
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}