发表于: 2018-10-20 09:53:50
1 376
今天完成的事情:
1.接口
先设计一个Hero类
public class Hero {
public String name;
protected float hp;
}
然后写一个接口
public interface AD {
public void physicAttack();
}
然后再写出接口的实现类
public class ADHero extends Hero implements AD{
@Overrid //复写标签,帮助自己检查是否正确的复写了父类中已有的方法
public void physicAttack(){
System.out.println("进行物理攻击");
}
}
2.对象转换
明确引用类型与对象类型的概念
在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad
public class Hero {
public String name;
protected float hp;
public static void main(String[] args) {
Hero h = new Hero(); //h引用的类型是Hero
ADHero ad = new ADHero(); //把ad引用所指向的对象的类型是ADHero
//类型转换指的是把一个引用所指向的对象的类型,转换为另一个引用的类型
//把ADHero当做Hero使用,一定可以
h = ad;
}
}
强制转换
package charactor;
import charactor1.Support;
public class Hero {
public String name;
protected float hp;
public static void main(String[] args) {
Hero h =new Hero();
ADHero ad = new ADHero();
Support s =new Support();
h = ad; //这里的h指向的是ad对象
ad = (ADHero) h; //所以强制转换成ADHero是可以的
h = s; //这里的h指向的是Support对象
ad = (ADHero)h; //所以转换成ADHero类型会失败,这里强制转换会报出异常
}
}
3.重写
写一个父类,提供effect的方法
public class Item {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect() {
System.out.println("物品使用后,可以有效果");
}
}
写一个子类,继承了父类中的属性,并提供了父类中的方法effect
public class LifePotion extends Item{//继承了父类中的属性
public void effect(){ //提供了父类中的方法effect
System.out.println("血瓶使用后,可以回血");
}
}
调用这个方法,会执行子类中提供的方法而不是父类中提供的方法
public class Item {
String name;
int price;
public void effect(){ //调用重写的方法,就会执行重写的方法
System.out.println("物品使用后,可以有效果");
}
public static void main(String[] args) {
Item i = new Item();
i.effect();
LifePotion lp =new LifePotion();
lp.effect();
}
}
4.多态
操作符的多态
public class Hero {
public String name;
protected float hp;
public static void main(String[] args) {
int i = 5;
int j = 6;
int k = i+j; //如果+号两侧都是整型,那么+代表 数字相加
System.out.println(k);
int a = 5;
String b = "5";
String c = a+b; //如果+号两侧,任意一个是字符串,那么+代表字符串连接
System.out.println(c);
}
}
类的多态
都是同一个类型,调用同一个方法,却能呈现不同的状态
public class Item {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect() {
System.out.println("物品使用后,可以有效果 ");
}
public static void main(String[] args) {
Item i1= new LifePotion();
Item i2 = new MagicPotion();
System.out.print("i1 是Item类型,执行effect打印:");
i1.effect();
System.out.print("i2也是Item类型,执行effect打印:");i2.effect();
//打印出的结果是不同的
}
}
i1继承了Item
public class LifePotion extends Item {
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
}
i2继承了ITem
public class MagicPotion extends Item{
public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
}
}
5.JDBCtemplate
先写一个实体类
public class User {
private long Id;
private String Name;
private String Qq;
public String getuName() { return Name; }
public void setuName(String name){this.Name=name;}
public String getuQq(){return Qq;}
public void setuQq(String qq){this.Qq=qq;}
public long getuId(){return Id;}
public void setuId(long id){this.Id=id;}
}
然后写一个接口并与实体类对应
public interface UserDao {
public void addUser(User user);
public void deleteUser(int id);
public void updateUser(User user);
public String searchUserName(int id);
public User searchUser(int id);
public List<User> findAll();
}
写出接口的实现类
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
public void addUser(User user) {
String sql = "insert into student values(null,?,?)";
// System.out.println(user.getuName());
this.getJdbcTemplate().update(sql, user.getuName(),
user.getuQq());
}
public void deleteUser(int id) {
String sql = "delete from student where id=?";
this.getJdbcTemplate().update(sql, id);
}
public void updateUser(User user) {
String sql = "update student set name=?,qq=? where id=?";
this.getJdbcTemplate().update(sql, user.getuName(),
user.getuQq(), user.getuId());
}
public String searchUserName(int id) {// 简单查询,按照ID查询,返回字符串
String sql = "select name from student where id=?";
// 返回类型为String(String.class)
return this.getJdbcTemplate().queryForObject(sql, String.class, id);
}
public List<User> findAll() {// 复杂查询返回List集合
String sql = "select * from student";
return this.getJdbcTemplate().query(sql, new UserRowMapper());
}
public User searchUser(int id) {
String sql="select * from student where id=?";
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);
}
class UserRowMapper implements RowMapper<User> {
//rs为返回结果集,以每行为单位封装着
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setuId(rs.getInt("id"));
user.setuName(rs.getString("username"));
user.setuQq(rs.getString("password"));
return user;
}
}
}
配置applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/task?characterEncoding=UTF-8"></property>
<property name="username" value="root"></property>
<property name="password" value="5525"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="userDao" class="impl.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>
然后写出测试类测试实现类
public class UserTest {
@Test//增
public void deom1(){
User user=new User();
user.setuId(300);
user.setuName("魏小威");
user.setuQq("5558");
ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao dao=(UserDao) applicationContext.getBean("userDao");
dao.addUser(user);
}
@Test//改
public void demo2(){
User user=new User();
user.setuId(300);
user.setuName("王艳");
user.setuQq("123456789");
ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao dao=(UserDao) applicationContext.getBean("userDao");
dao.updateUser(user);
}
@Test//删
public void demo3(){
ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao dao=(UserDao) applicationContext.getBean("userDao");
dao.deleteUser(301);
}
@Test//查
public void demo4(){
ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao dao=(UserDao) applicationContext.getBean("userDao");
String name=dao.searchUserName(10);
System.out.println(name);
}
}
6.mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
先写一个实体类
public class Student {
private int id;
private String name;
private String qq;
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 getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
配置mybatis-config.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>
<typeAliases>
<package name="pojo"/>
</typeAliases>
<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://127.0.0.1:3306/task?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="5525"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/Student.xml"/>
</mappers>
</configuration>
创建实体类的mapper.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="pojo.Student">
<select id="listStudent" resultType="pojo.Student">
select * from student
</select>
<insert id="addStudent" parameterType="pojo.Student">
insert into student (name,qq) values (#{name},#{qq})
</insert>
<delete id="deleteStudent" parameterType="pojo.Student">
delete from student where id=#{id}
</delete>
<update id="updateStudent" parameterType="Student">
update student set name = #{name },qq=#{qq} where id=#{id}
</update>
<select id="getStudent" parameterType="int" resultType="pojo.Student">
select *from student where id=#{id}
</select>
</mapper>
写一个测试类
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;
public class TestStudent {
public static void main(String[] args)throws IOException{
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
//增
Student s =new Student();
s.setName("尽快");
s.setQq("88888886");
session.insert("addStudent",s);
//删
s.setId(11);
session.delete("deleteStudent",s);
//改
Student s1 =session.selectOne("getStudent",10);
s1.setName("在项城");
s1.setQq("111110000");
session.update("updateStudent",s1);
//查
Student s2 =session.selectOne("getStudent",7);
System.out.println(s2.getName());
// listAll(session);
session.commit();
session.close();
}
private static void listAll(SqlSession session) {
List<Student> ss=session.selectList("listStudent");
for(Student s :ss) {
System.out.println(s.getId()+"---"+s.getName()+"---"+s.getQq());
}
}
}
输出
增删改查均执行成功
明天计划的事情:
学习spring+mybatis
遇到的问题:
配置文件beans标签报红
异常源码Element 'beans' cannot have character [children], because the type's content type is element-only.//Spring在初始化的时候无法识别applicationContext.xml中的元素。
错误原因
在网上拷贝代码时,有tab或者空格导致格式错误,Spring无法识别。
解决方法
把代码重新手敲一遍
在执行更新操作时报出
Mapped Statements collection does not contain value for getStudent
映射语句合集不包含getStudent
不能执行更新操作
错误原因实体类的映射文件没有getStudent方法
解决方法
在映射文件中加入getStudent方法
收获
1.遇到问题要理性的思考,找到出错的位置,一步一步的去解决,解决完后理清思路,想一下为什么会出错
2.注意代码不能输错
评论