这次是重头戏更新,是第二次Mybatis+JDBC,涉及到增删改查,操作user表的CRUD,这次实验课上的感觉就是胡总的课确实有东西,值得一上 ,足足的干货。表白胡总第二天。
简单的罗列一下知识点,
userMapper.xml中是要填写一些有关数据库的代码,例如select* from user。 parameterType=“int” 填写返回值类型。
在userMapper.xml中,数据库代码不传id,是因为ID是自增长的,传不进去。
在userMapper.xml中,不可以复制粘贴代码,因为编码的原因,会造成代码编写错误,例如:同为b字母,但是自己电脑编写出来编码为gb2312,复制代码中b编码为utf-8,这样就会出现错误,而且肉眼无法观察!
当执行CRUD操作时,insert、delete、update都执行正常,但是,select查不到
数据,原因是实体类中没有提供无参构造函数。没有提供任何构造函数时,系统会提供一个默认的无参构造函数,但是,当提供了有参构造函数时,系统就不会提供,需要显式的定义。
session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
或改变为true
util 功能, selectOne就是查询一次
封装 User类
User user = new User();
user.setName(“sas”);
user.setAge(90);
int u = session.insert(s,user);
system.out.println(u);
对User类型的封装,输出1表示insert成功,-1表示不成功
还有在dao中调用,dao意为对象访问
public class text {
public static void main(String[] args) throws IOException{
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
// String statement = "com.sxau.rjxy.Mybatis.userMapper"+".getUser";
// Listlist = session.selectList(statement);
// System.out.println(list);
//增加 user
// String statement1 = "com.sxau.rjxy.Mybatis.userMapper"+".insertUser";
// int re= session.insert(statement1,new user("22","eeds","212"));
// session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
// System.out.println(re);
// session.close();
//
//删除user
// String statement2 = "com.sxau.rjxy.Mybatis.userMapper"+".deleteUser";
// int re1= session.delete(statement2,11);
// session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
// System.out.println(re1);
// session.close();
//更新 user
String statement3 = "com.sxau.rjxy.Mybatis.userMapper"+".updateUser";
int re2= session.update(statement3,new user("12","lala","23"));
session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
System.out.println(re2);
//查找user
String statement4 = "com.sxau.rjxy.Mybatis.userMapper"+".selectUser";
int re3= session.selectOne(statement4,"12");
session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
System.out.println(re3);
}
}
其实相对比来说main方法直接了当但是比较麻烦,所以添加了test方法来测试,也就是需要引入一个Jutil包即测试包来进行测试,测试代码如下。
public class utilText {
@Test
public void selectUser() throws IOException {
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//查找user
String statement4 = "com.sxau.rjxy.Mybatis.userMapper"+".selectUser";
int re3= session.selectOne(statement4,"12");
session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
System.out.println(re3);
}
@Test
public void insertUser() throws IOException {
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//增加 user
String statement1 = "com.sxau.rjxy.Mybatis.userMapper"+".insertUser";
int re= session.insert(statement1,new user("79","egdsds","663"));
session.commit();
System.out.println(re);
}
@Test
public void deleteUser() throws IOException {
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//删除user
String statement2 = "com.sxau.rjxy.Mybatis.userMapper"+".deleteUser";
int re1= session.delete(statement2,13);
session.commit();
System.out.println(re1);
session.close();
}
@Test
public void updateUser() throws IOException {
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//更新 user
String statement3 = "com.sxau.rjxy.Mybatis.userMapper"+".updateUser";
user user = new user("22","lasds","45");
int re2= session.update(statement3,user);
System.out.println(re2);
}
}
然后发现其实测试代码的前四行都为一样,就是不停地复制粘贴,所以需要进行优化,将前四行代码封装成一个包,进行函数的调用,这样看起来就会简单明了,而且有利于之后的代码修改等,这告诉我们一定要学会代码的封装(3行相同代码出现三次以上,进行封装)
下面是封装好的代码效果
test代码
public class utilText {
@Test
public void selectUser() throws IOException {
查找user
SqlSession session = MybatisUtil.getSqlSession();
String statement4 = "com.sxau.rjxy.Mybatis.userMapper"+".selectUser";
int re3= session.selectOne(statement4,"12");
session.commit();//运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。
System.out.println(re3);
}
@Test
public void insertUser() throws IOException {
//增加 user
SqlSession session = MybatisUtil.getSqlSession();
String statement1 = "com.sxau.rjxy.Mybatis.userMapper"+".insertUser";
int re= session.insert(statement1,new user("79","egdsds","663"));
session.commit();
System.out.println(re);
}
@Test
public void deleteUser() throws IOException {
//删除user
SqlSession session = MybatisUtil.getSqlSession();
String statement2 = "com.sxau.rjxy.Mybatis.userMapper"+".deleteUser";
int re1= session.delete(statement2,13);
session.commit();
System.out.println(re1);
session.close();
}
@Test
public void updateUser() throws IOException {
//更新 user
SqlSession session = MybatisUtil.getSqlSession();
String statement3 = "com.sxau.rjxy.Mybatis.userMapper"+".updateUser";
user user = new user("22","lasds","45");
int re2= session.update(statement3,user);
System.out.println(re2);
}
}
MybatisUtil代码
public class MybatisUtil {
public static SqlSession getSqlSession() throws IOException {
String resource="conf.xml";
//加载mybatis的配置文件(他也加载关联的映射文件)
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession sqlSession = sessionFactory.openSession();
return sqlSession;
}
}
就是这么多,代码其实挺简单的,在第一次实验的基础上进行添加修改就可以,继续加油!!!抽时间还是要学习一下Ajax的,毕竟省市联动实验因为打比赛还没来得及做。